操作符
ECMAScript的操作符与其它语言都是类似的,它的特别之处在于,操作符不但可以使用于数字,还可以对其它类型的值使用,所以有很多必须要注意的转换规则,不过这些规则也不需要强记,只要在有需要的时候参考就行了。
一元操作符
递增、递减操作符
递增和递减操作符直接借鉴于C,所以使用方法也是一致的。但是,ECMAScript的递增、递减操作符可以操作任何类型的值,在对非数值类型的值使用递增、递减操作时,会先将其转换为数值,再进行增减的操作。
var s1 = "2";
var s2 = "z";
var b = false;
var f = 1.1;
var o = {
valueOf: function() {
return -1;
}
};
s1++; // 值变成数值 3
s2++; // 值变成 NaN
b++; // 值变成数值 1
f--; // 值变成 0.10000000000000009(由于浮点舍入错误所致)
o--; // 值变成数值-2
一元加、减操作符
这两个操作符就是我们所熟悉的正号与负号,使用方法与数学上是完全一致的。
一元加号放在数值前不会对数值有任何影响,但是对非数值使用,则相当于对这个数值使用Number()
函数进行转换:
// 变量定义与上面一致
s1 = +s1; // 值变成数值 1
s2 = +s2; // 值变成数值 1.1
s3 = +s3; // 值变成 NaN
b = +b; // 值变成数值 0
f = +f; // 值未变,仍然是 1.1
o = +o; // 值变成数值-1
一元减号对数值进行操作时会将其变成负数,如果对非数值使用,则先对其使用与一元加号相同的转换,再将得到的结果转成负数。
位操作符
在ECMAScript当中,位操作符使用的情景比较少,所以这里不做详细记录。如有需要再作补充。
布尔操作符
布尔操作符一共有三个:与(AND)、或(OR)和非(NOT)。
逻辑非
逻辑非操作符由一个叹号(!)表示,逻辑非会先将其操作数变成一个布尔值,然后再对其求反。
alert(!false); // true
alert(!"blue"); // false
alert(!0); // true
alert(!NaN); // true
alert(!""); // true
alert(!12345); // false
如果对同一个操作数使用两次逻辑非,可以得到这个值对应的布尔值,与对其使用Boolean()
函数进行转换的效果一致。
逻辑与
逻辑与的操作符为(&&),只有两个操作数都为true, 逻辑与操作才返回true。逻辑与可以应用于任何类型的操作数,而不仅仅是布尔值。在其中一个操作数不为布尔值的情况下,操作结果就不一定为布尔值。
逻辑与操作属于短路求值,即如果第一个操作数能决定结果,则其不会对第二个操作数进行求值。对逻辑与操作来说,如果第一个操作数的结果为false,则其操作结果就为false,不会对第二个操作数进行求值。
var found = true;
var result = (found && someUndefinedVariable); // 这里会发生错误
alert(result); // 这一行不会执行
var found = false;
var result = (found && someUndefinedVariable); // 不会发生错误
alert(result); // 会执行("false")
逻辑或
逻辑或的操作符为(||),只有两个操作数都为false,逻辑或才返回false。逻辑或与逻辑与的使用方法类似,同样也为短路求值操作。不同之处在于,如果逻辑或的第一个操作数返回的是true,则操作结果为true,不会对第二个操作数进行运算。
乘性操作
乘性操作包括乘法、除法和取模。这三个操作符的使用方法与数学上的使用方法是一致的,但是同样的,这三个操作符不单单可以使用在数值类型上,如果是对非数值类型使用了这些操作,则会先使用Number()
函数进行转化后再进行数值运算。
加性操作
加性操作包括加法与减法。同乘性操作,加性操作在对非数值进行运算时,也会先对非数值行进行转换。
需要注意的是,进行加法操作时,如果其中一个操作数为字符串,则进行的不是普通的加法操作,而是字符串的拼接。如果另外一个操作数不为字符串,则会将其转换成字符串再时行拼接。
var result2 = 5 + "5"; // 一个数值和一个字符串相加
alert(result2); // "55"
关系操作符
关系操作符包括大于(>)、小于(<)、大于等于(>=)和小于等于(<=),这几个操作符都会返回一个布尔值。
需要注意的是,如果是两个字符串进行比较,则比较的是字符串对应的字符编码值。
如果其中一个为数值,则会先将另一个转换为数值再进行比较。并且,任何一个数与NaN
进行比较都会返回false
。
相等操作符
ECMAScript当中有两组相等操作符:相等和不相等、全等和不全等。
相等和不相等
ECMAScript中的相等操作符由两个等号组成(==),如果两个数相等则返回true
。不相等符号由一个叹号跟一个等号组成(!=),如果两个数不相等则返回true
。
这两个操作符在进行相等判定前,都会对操作数进行转换,使其变为同一种类型再进行判断。
全等和不全等
全等操作符由三个等号组成(=),不全等符号由一个叹号跟两个等号组成(!)。
除了在比较之前不对操作数进行转换之外,这两个操作符与上面的两个操作符没有什么区别。由于相等和不相等操作符存在类型转换问题,而为了保持代码中数据类型的完整
性,建议使用全等和不全等操作符。
var result1 = ("55" == 55); //true,因为转换后相等
var result2 = ("55" === 55); //false,因为不同的数据类型不相等
var result1 = ("55" != 55); //false,因为转换后相等
var result2 = ("55" !== 55); //true,因为不同的数据类型不相等
条件操作符
条件操作符,即三目运算符。其语法形式为:
variable = boolean_expression ? true_value : false_value;
如果表达式的求值结果为真,则取的是true_value
,如果其结果为假,则取的是false_value
。
赋值操作符
简单的赋值操作符由一个等号表示(=),其作用就是把右边的操作数赋值给左边的变量。
在赋值号前加上乘性操作符,加性操作符或位操作符,就能构成复合赋值操作符。复合赋值操作主要用来对下面常规表达式进行简写:
var num = 10;
num = num + 10;
// 复合赋值操作
var num = 10;
num += 10;
逗号操作符
使用逗号操作符可以在一条语句中执行多个操作:
var num1 = 1, num2 = 2, num3 = 3;
除此之外,逗号操作符的使用之处也不是很多,也不再赘述。