操作符:一元操作符、布尔值操作符(逻辑操作符)、加性操作符、乘性操作符、关系操作符、相等操作符、条件操作符以及赋值操作符
操作符:ECMAScript的操作符适用于多种类型的值,包括适用于对象。但是在用于对象时需使用valueOf()或者调用toString()方法,来取得可以操作的值。
1.一元操作符包括自增和自减以及一元加减操作符
-自增
在原变量的基础上+1,对原变量自增后原变量立即增加1。
写法:a++ 或 ++a 两者对于原变量的作用一样,但是值不一样.
a++ 的值为自增加前的值,即原值; ++a 的值为自增后的值,即新值;
var num1 = 2, num2= 4; var num3 = num1++ + num2; //输出 6 num1是没有增加前的 var num4 = num1 +num3 ;//输出9 num1已经完成了自增
-自减同上
var num1 = 8, num2= 4;
var num3 = num1-- - num2; //输出4 var num4 = num1 -num3 ; //输出 3
-一元加减操作符 一元即一个字面量
var a = "0.1"; a = +a;//值变成数值0.1 a = -a;值变成数值-0.1
可利用一元加操作符将字符转变为数值,与Number()的作用相同
2.布尔值操作符(逻辑操作符)!非 || 或 && 与
! 非 :任何值都会返回一个布尔值。其过程是首先将其操作数转化一个布尔值,然后进行取反
遵循的规则是:(记忆时对于对象、非空字符串以及任意非0数值会返回true后进行取反。)
对于对象、非空字符串以及任意非0数值(包括infinity 即正无穷)会返回false
对于空字符串、数值0、null、NaN以及undefined会返回true
注意:
a =!!a; 取两次就是原值,为隐性转换数据类型为Boolean
|| 或 :由两个操作数组成,如果第一个操作数返回true则结果返回true;如果第一个操作符返回false则结果返回false;
遵守的规则是:
对于第一个操作数为对象则返回 第一个操作数
对于第一个操作数求值为false则返回第二个操作数
对于两个操作数都是null,则返回null
对于两个操作数都是undefined,则返回undefined
对于两个操作数都为NaN,则返回NaN
&& 与 逻辑与是一个短路操作。只有两端同时为true才返回true(第二个操作数)。当第一个操作数是false时,则返回第一个数不再检查第二个数。
遵守的规则是:
对于第一个操作数是对象,则返回第二个操作数
对于第一个操作说是null,则返回null
对于第一个操作数是NaN,则返回NaN
对于第一个操作是undifined,则返回undifined
3.加性操作符
加号 +
如果两个操作数为数值,执行常规的加法计算,根据下列规则返回:
如果有一个操作数为NaN,则返回NaN
如果是Infinity加Infinity,则返回Infinity
如果是Infinity加-Infinity,则返回-Infinity
如果是-Infinity加-Infinity,则返回NaN
如果+0 加 +0 .则返回 +0
如果 +0 加-0 ,则返回+0
如果-0 加-0 ,则返回-0
如果两个操作数为字符串,执行拼串操作
如果两个操作符其中一个是字符串,则将其他数据类型的操作数转换为字符串后,再进行拼串
var a = 12,b = "11"; var c = a+b ;//返回1211
减号 -
与加号类似,但是稍有不同
遵循的规则为:
如果两个操作数为数值,则执行常规运算
如果有一个操作数为NaN,则返回NaN
如果Infinity减Infinity,则返回NaN
如果-Infinity减-Infinity,则返回NaN
如果Infinity减-Infinity,则返回Infinity
如果-Infinity减Infinity,则返回-Infiniy
如果是 +0 减 +0 则返回 +0
如果是 -0 减 +0 则返回 -0
如果是-0 减 -0 则返回+0
如果操作数为字符串,则先转换为数值,此处与加号有区别
如果操作数为对象,也是先转换为数值
4.乘性操作符 * / %
乘法 *
操作数是数值,则执行数值计算。其中一个操作符有符号,那么结果就是负数。如果结果超出了ECMAScript数值的表示范围,则返回Infinity或-Infinity
有一个操作数为NaN,则结果是NaN
如果是Inifinty与0相乘,则结果是NaN ;与非0数值想成,则返回Inifinity或者-Infinity,取决于有符号操作数的符号
如果是Infinity和Infinity相乘,则结果是Infinity
如果不是数值,则先转换为数值,按照前面的进行操作
除法 /
操作数是数值,则执行数值计算。其中一个操作符有符号,那么结果就是负数。如果结果超出了ECMAScript数值的表示范围,则返回Infinity或-Infinity
有一个操作数为NaN,则结果是NaN
如果是Infinity和Infinity相除,则结果是NaN
0和0相除,返回NaN
非零的有限数被0除,则结果是Infinity或-Infinity,取决于有符号的操作数
如果是Infinity被任何非零数值除,则结果是Infinity或 -Infinity,取决于符号操作数的符号
如果不是数值,则先转换为数值,按照前面的进行操作
% 取模
两者都是数值,按照除法计算,返回除得的余数
被除数是无穷大的值,除数是有限大的值,结果返回NaN
被除数是有限大的值,除数是无穷大的值,则结果是被除数
被除数是有限大的数值而除数是零,结果返回NaN
被除数是零,则结果是零
如果Infinity被infinity除,则结果是NaN
如果一个操作符不是数值,则后台调用Number()将其转化为数值,按照前面的规则计算
5.关系操作符 > < >= <=
操作的规则:
两个操作数都是数值,则执行数值比较
两个操作数都是字符串,则比较字符串对应的字符编码
两者有一个是数值,则另一个也被转化为数值
两者有一个是对象,则将其转化为字符串(valueOf()或者toString()),按照前面的方法进行比较
两者有一个是布尔值,则将转化为数值,进行比较
相等操作符 == !== === !==
有一个操作数为布尔值,将其转化为数值后,再进行数值比较
一个是字符串,另一个是数值,将字符串转换为数值后,再进行数值比较
一个是对象,另一个不是对象,使用valueOf()得到的基本数据类型后,按照前面的进行比较
注意:null和undifined是相等的
在比较相等性前,不能将null和undefined进行转化
有操作数为NaN,则返回false(两个都是NaN,也返回false,因为NaN不等于NaN)
两个操作符为对象,两个操作数指向同一个 对象时,则返回true
=== 全等
只在两个操作数未经转化前就相等的情况下,返回true
注意:由于相等和不相等存在类型转换问题,为了保持代码中数据类型的完整性,推荐使用全等和不全等
6.条件操作符(三元操作符)
语法:条件表达式?语句1:语句2; 如果这个条件表达式为true,则返回输出语句1,是false则输出语句2 (注意语句之间的冒号)
var num1 = 1,num2=2; var max = num1 >num2? num1:num2;//输出2
注:如果条件表达式为非布尔值,则先转换为布尔值
7.赋值操作符
复合操作符
乘/赋值 *= 除/赋值 /= 模/赋值 %= 加/赋值 += 减/赋值 -=
var num =1; num = num =2; //可以这样写 var num = 1; num += 2;