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