一、常见操作符
1. 一元操作符:只能操作一个值
递增、递减操作符
在应⽤于对象时,先调⽤对象的 valueOf() ⽅法以取得⼀个可供操作的值。然后对该值应⽤前述规则。如果结果是 NaN,则再调⽤ toString() ⽅法后再应⽤前述规则。对象变量变成数值变量。
var o = {
valueOf: function() {
return -1;
} };
document.getElementById(o--);//-2
在应⽤于⼀个不包含有效数字字符的字符串时,将变量的值设置为 NaN,字符串变量变成数值变量。var s2 = "1.1";s2++; // 值变成 NaN
⼀元加和减操作符
+号放在数值前⾯,对数值不会产⽣任何影响,不过,在对⾮数值应⽤⼀元加操作符时,该操作符会像 Number() 转型函数⼀样对这个值执⾏转换var s3 = "z";s3 = +s3;//NaN
将⼀元减操作符应⽤于数值时,该值会变成负数。var s3 = "z";s3 = +s3;//NaN
注意 递增递减操作符和⼀元加减操作符作⽤于非数值的变量时,都会隐式调⽤ Number() 函数,区别在于递增递减操作符改变的是变量本身,⽽⼀元加减操作符不会改变变量⾃身的值。
2.布尔操作符
逻辑非
alert(!undefined);alert(!NaN); alert(!null);//true,null、undefined、NaN返回true
var p=new Object("kkk");
alert(!p);//false,不是对象返回false
alert(!""); // true是一个空字符串返回true
alert(!"blue"); // false,是一个非空字符串
alert(!0); // true
alert(!Infinity);//false。非0数值返回false
逻辑与
如果有一个操作数是null、NaN、undefined,则返回null、NaN、undefined 如果第⼀个操作数是对象,则返回第⼆个操作数; 如果第⼆个操作数是对象,则只有在第⼀个操作数的求值结果为 true 的情况下才会返回该对象; 如果两个操作数都是对象,则返回第⼆个操作数; 注意 逻辑与和逻辑或操作属于短路操作,即如果第⼀个操作数能够决定结果,那么就不会再对第⼆个操作数求值。
逻辑或
如果第⼀个操作数是对象,则返回第⼀个操作数; 如果第⼀个操作数的求值结果为 false,则返回第⼆个操作数; 如果两个操作数都是对象,则返回第⼀个操作数;
乘性操作符 如果参与乘性计算的某个操作数不是数值,后台会先使⽤ Number() 转型函数将其转换为数值。也就是说,空字符串将被当作 0,布尔值 true 将被当作1。
alert(2*""); // 0
alert(true*5); // 5
alert(5/2); // 2.5,区别于C语言的结果2
alert(5%2); // 1
加性操作符
如果有⼀个操作数是 NaN,则结果是 NaN; 如果是 Infinity 加 负Infinity,则结果是 NaN; 如果两个操作数都是字符串,则将第⼆个操作数与第⼀个操作数拼接起来; 如果只有⼀个操作数是字符串,则将另⼀个操作数转换为字符串,然后再将两个字符串拼接起来。 对于 undefined 和 null,则分别调⽤ String()函数并取得字符 串"undefined"和"null"
var num1 = 5;
var num2 = 10;
var message = "The sum of 5 and 10 is " + num1 + num2;//The sum of 5 and 10 is510,由于有字符串所以是拼接
var message = num1 + num2;//15,数字的加法
document.write(message);
减性操作符
如果有⼀个操作数是字符串、布尔值、null 或 undefined,则先在后台调⽤ Number() 函数将其转换为数值,然后再根据前面的规则执行减法计算。如果转换的结果是 NaN,则减法的结果就是NaN; 如果有⼀个操作数是 NaN,则结果是 NaN; 如果是 Infinity 减 Infinity,则结果是 NaN; var result7 = 1 - undefined; // NaN,因为 undefined 被转换成 NaN
关系操作符 大于、小于、大于等于、小于等于
如果两个操作数都是字符串,则⽐较两个字符串对应的字符编码值。 如果一个是数值,则把另一个转换为数值来比较 如果一个是布尔值,先转换为数值在比较 如果是对象的话,则调⽤这个对象的 valueOf() ⽅法,⽤得到的结果按照前⾯的规则执⾏⽐ 较。如果对象没有 valueOf()⽅法,则调⽤ toString() ⽅法,并⽤得到的结果根据前⾯的规则执⾏⽐较。
var result7 = "a" < 3; // false,因为"a"被转换成了 NaN
任何操作数与 NaN 进⾏关系⽐较,结果都是 false。
相等和不相等(先强制转换再⽐较)
null 和 undefined 是相等的。⽐较相等性之前,不能将 null 和 undefined 转换成其他任何值。 如果两个操作数都是对象,则⽐较它们是不是同⼀个对象。如果两个操作数都指向同⼀个对象(内存地址相同),则相等操作符返回 true;否则,返回 false。 如果有⼀个操作数是 NaN,则相等操作符返回 false,不相等操作符返回 true。即使两个操作数都是NaN,相等操作符也返回 false。
NaN==NaN;//false
NaN!=NaN;//true
5==NaN;//false
5!=NaN;//true
null==0;//false
undefined==0;//false
null==undefined;//true
"7"==7;//true
全等和不全等(仅⽐较⽽不转换) 全等和不全等操作符在比较之前不转换操作数,所以只有在两个操作数相等且类型相同的情况下,才全等
document.write(("1" !==1));//true
document.write(("1" ===1));//false
条件操作符、赋值运算符和C语言一样 逗号操作符
定义多个变量 用于赋值,返回表达式最后一项var 錒(1,2,4,5);//5‘