3.5 操作符
3.5.1 一元操作符 ——只能操作一个值
1、递增和递减
- 前置型——先+ - 再求值
-
- 前增(++a)
- 前减(--a)
var a = 29;
var b = --a + 2;
alert(a); //输出28
alert(b); //输出30
- 后置型——先求值再 + -
-
- 后增(a++)
- 后减(a--)
var a = 2;
var b = 21;
var c = a++ + b; //23
var d = a + b; //24
2、一元加和减操作符
——主要用于基本的算术运算,也可以用于转换数据类型
一元操作符放在数值前面,不会对数值造成任何影响。
不过,在对非数值应用一元操作符时,该操作符会像Number( ) 转型函数一样对这个值进行转换。
var s1 = "01";
var s2 = "1.1";
var s3 = "z";
var b = false;
var f = 1.1;
var o = {
valueOf: function() {
return -1;
}
};
s1 = +s1; //1
s1 = +s1; //1.1
s1 = +s1; //NaN
b = +b; //0
f = +f; //1.1
o = +o; //-1
//操作符为 - 时,只是将得到的数值在转换为负数而已。
3.5.2 位操作符(对目前来,太底层,有时间再理解 )
——用于在最基本的层次上,即按内存中表示数值的位来操作数值。
- 按位非(NOT)
- 按位与(AND)
- 按位或(OR)
- 按位异或(XOR)
- 左移
- 有符号的右移
- 无符号右移
3.5.3 布尔操作符
——非(NOT) 与(AND) 或(OR)
1、逻辑非(!)
可以应用于ECMAScript
中的任何值。无论这个值是什么数据类型,这个操作符都会返回一个布尔值。逻辑非操作符首先会将它的操作数转换为一个布尔值,然后再对其求反。
逻辑非操作符遵循下列规则:
alert(!false); //true
alert(!"blue"); //false
alert(!0); //true
alert(!NaN); //true
alert(!""); //true
alert(!123); //false
同时使用两个逻辑非操作符 !!,可以模拟Boolean( ) 转型函数的行为。
2、逻辑与(&&)
——可以用于任何类型的操作数,不仅仅是布尔值。
逻辑与的真值表如下:
规则:
q
如果第一个操作数是对象,则返回第二个操作数;
q
如果第二个操作数是对象,则只有在第一个操作数的求值结果为true
的情况下才会返回该对象;
q
如果两个操作数都是对象,则返回第二个操作数;
q
如果有一个操作数是null,则返回null;
q
如果有一个操作数是NaN,则返回NaN;
q
如果有一个操作数是undefined,则返回undefined。
alert(1 && 2 && 3); //返回数值3
alert("a" && "b"); //返回"b"
//这一特点可以好好利用,用来做赋值。
&& 和 || 属于短路操作,即如果第一个能够决定结果,就不再对第二个操作数求值。
对于&&,第一个操作数的求值结果是false的话,直接返回false
对于||, 第一个操作数的求值结果是true的话,直接返回true
3、逻辑与(||)
逻辑或的真值表如下:
规则:
q
如果第一个操作数是对象,则返回第一个操作数;
q
如果第一个操作数的求值结果为false,则返回第二个操作数;
q
如果两个操作数都是对象,则返回第一个操作数;
q
如果两个操作数都是null,则返回null;
q
如果两个操作数都是NaN,则返回NaN;
q
如果两个操作数都是undefined,则返回undefined。
可以利用逻辑或来赋值。例如:
var myObject = preferredObject || backupObject;
变量myObject将被赋予等号后两个值中的一个。变量preferredObject
中包含优先赋给变量myObject
的值,变量 backupObject 负责在preferredObject
中不包含有效值的情况下提供后备值。如果preferredObject
的值不是null,那么它的值将被赋给myObject;如果是null,则将backupObject
的值赋给myObject。
3.5.4 乘性操作符 (相应规则,暂且不表)
- 乘法(*)
- 除法(/)
- 求模(%)
3.5.5 加性操作符 (相应规则,暂且不表)
- 加法(+)(注意加法操作符的字符串拼接作用)
var num1 = 5;
var num1 = 10;
var message = "The sum of 5 and 10 is " + num1 + num2;
alert(message); //"The sum of 5 and 10 is
510"
//每个 + 是独立的,按顺序执行的
var message ="The sum of 5 and 10 is " + (num1 + num2);
alert(message); //"The sum of 5 and 10 is
15"
- 减法(-)
3.5.6 关系操作符(相应规则,暂且不表)
- 小于(<)
- 大于(>)
- 小于等于(<=)
- 大于等于(>=)
3.5.7 相等操作符 (相应规则,暂且不表)
- 相等(==) 和 不相等(!=) 先转换再比较
特殊情况:
- 全等(===) 和 不全等(!==) 仅比较不转换
alert("55" != 55); //false 先转换再比较
alert("55" !== 55); //true 不转换,数据类型不同
3.5.8 条件操作符
看例子吧:
variable = boolean_expression ? true_value : false_value;
本质上,这行代码的含义就是基于对boolean_expression
求值的结果,决定给变量variable赋什么值。如果求值结果为true,则给变量variable
赋true_value
值;如果求值结果为false,则给变量variable
赋false_value
值。
再看一个例子:
var max = (num1 > num2) ? num1 : num2;
在这个例子中,max
中将会保存一个最大的值。这个表达式的意思是:如果num1
大于num2(关系表达式返回true),则将num1
的值赋给max;如果num1
小于或等于num2(关系表达式返回false),则将num2
的值赋给max。
3.5.9 赋值操作符(=)
复合赋值操作:
- 乘/赋值(*=)
- 除/赋值(/=)
- 模/赋值(%=)
- 加/赋值(+=)
- 减/赋值(-=)
- 左移/赋值(<<=)
- 有符号右移/赋值(>>=)
- 无符号右移/赋值(>>>=)
举个例子:
var num = 10;
var num += 10; //等同于
var num = num + 10;
3.5.10 逗号操作符
使用逗号操作符可以在一条语句中执行多个操作。
var num1=1, num2=2, num3=3;
此外,还可用于赋值。在用于赋值时,逗号操作符总会返回表达式的最后一项:
var num = (2, 5, 7, 4, 3 ); // num的值是3