第 4 章(表达式和运算符)(4.8~ 4.)

4.8.1 "+"运算符

二元加法运算符“+”可以对两个数字做加法,也可以做字符串连接操作:

如果当2个操作数都是数字或者字符串的时候,无需转换,数字会相加,字符串会拼接。对于其他情况,则要进行一些必要的类型转换,并且运算符的行为依赖于类型转换的结果。加号的转换规则优先考虑字符串连接,如果其中一个操作数是字符串或者转换为字符串的对象,另一个操作数将会转换为字符串,加法将进行字符串的连接操作。如果2个操作数都不是类字符串,那么将进行算术加法运算。

从技术上讲,加法操作符的行为表现。

① 如果其中一个操作数是对象,则对象会遵循对象到原始值的转换规则转换为原始类值:日期对象是通过 toString() 方法执行转换,其他对象则通过 valueof() 方法执行转换(如果 valueof() 方法返回一个原始值的话)。由于多数对象都不具备可用的 valueof() 方法,因此它们会通过 tostring() 方法来执行转换。

② 在进行了对象到原始值的转换后,如果其中一个操作数是字符串的话,另一个操作数也会转换为字符串,然后进行字符串连接。

③ 否则,两个操作数都将转换为数字(或者NaN),然后进行加法操作。

1+2          // 3 加法
“1”+“2”      // 12 字符串拼接
“1”+2        //  12 数字转换为字符串,然后拼接
1+{}         // 1[object object] 对象转换为字符串后进行字符串连接
true+true    // 2 布尔值转换为数字后做加法
2+null       // 2 null 转换为0后做加法
2+undefined  // NaN  undefined 转换为NaN 后做加法

当加号运算符和字符串和数字一起使用时,需要考虑加法的结合性对运算顺序的影响。也就是说,运算结果是依赖于运算符的运算顺序的,比如:

1+2+“blind mice”      // "3 blind mice"
1+(2+"blind mice")    // "12 blind mice"

4.8.2 一元算术运算符

一元运算符作用于一个单独的操作数,并产生一个新值。在JS 中,一元运算符具有很高优先级,而且都是右结合。

例如:一元加(+)、一元减(-)、递增(++)、递减(--)

4.8.3 位运算符

按位与(&)

按位或( | )

按位异或(^):位运算符“|”对它的整型操作数逐位执行布尔异或操作,异或是指第一个操作数为 true 或第二个操作数为 true。但两者不能同时为 true。如果两个操作数中只要一个相应位为 1(不能同时为1),那么结果中的这一位就是1 。例如:oxFoFo ^ oxFoFo = oxoFFo

 

posted @ 2017-08-17 17:19  Web小萌新  阅读(128)  评论(0编辑  收藏  举报