布尔操作符
逻辑与(&&)
在有一个操作数不是布尔值的情况下,逻辑与操作就不一定返回布尔值,规则如下:
- 如果第一个操作数时对象,则返回第二个操作数
- 如果第二个操作数时对象,则只有在第一个操作数的求值结果为true的情况下才会返回该对象
- 如果两个操作数都是对象,则返回第二个操作数
- 如果第一个操作数是null,则返回null
- 如果第一个操作数是NaN,则返回NaN
- 如果第一个操作数是underfined,则返回underfined
- 逻辑与操作属于短路操作,即如果第一个擦偶偶书就能够决定结果,name就不会对第二个操作数求值
逻辑或(||)
如果有一个操作数不是布尔值,规则如下:
- 如果第一个数是对象,则返回第一个操作数
- 如果第一个操作数的求值结果为false,则返回第二个操作数
- 如果两个操作数都是对象,则返回第一个操作数
- 如果两个操作数都是null,则返回null
- 如果两个操作数都是NaN,则返回NaN
- 如果两个操作数都是underfined,则返回underfined
逻辑或为短路操作,即如果第一个操作数为true,则不会对第二个操作数求值
乘性操作符
乘法
在处理特殊值的情况下,乘法操作符遵循下列特殊的规则:
- 如果操作数都是数值,执行常规的乘法计算,正正为正,负负为正,一个有符号一个无符号,则结果为负,若超过了ECMASctipt数值的表示范围,则返回Indinity或-Infinity
- 如果有一个操作数是NaN,则结果是NaN
- 如果是Infinity与0相乘,则结果为NaN
- 如果是Infinity与非0 数值相乘,则结果是Infinity或-Infinity,取决于有符号操作数的符号
- 如果是Infinity与Infinity相乘,则结果是Infinity
- 如果有一个操作数不是数值,则在后台调用Number()将其转为数值,然后再应用上面的规则
除法
对特殊值的处理规则:
- 如果都是数值,按常规的方法进行计算;正正为正,负负为正,一个有符号一个无符号,则结果为负,若超过了ECMASctipt数值的表示范围,则返回Indinity或-Infinity
- 如果有一个操作数是NaN,则结果是NaN
- 如果是Infinity与Infinity相除,则结果是NaN
- 如果是零被零除,则结果是NaN
- 如果是非零的有限数被零除,则结果是Infinity或-Infinity,取决于有符号操作数的符号
- 如果是Infinity被任何非零数值除,则结果是Infinity或-Infinity,取决于有符号操作数的符号
- 如果有一个操作数不是数值,则在后台调用Number()将其转换为数值,然后再应用上面的规则
求摸(%)
特殊值规则如下:
- 如果操作数都是数值。执行常规的除法计算,返回除得的余数
- 如果被除数是无穷大值而除数是有限大的数值,则结果是NaN
- 如果被除数是有限大值而除数是无限大值,则返回NaN
- 如果是Infinity除以Infinity,则返回值是NaN
- 如果被除数是有限大的数值,而除数无穷大的数值,则返回值结果是被除数
- 如果被除数是0,则结果是0
- 如果有一个操作数不是数值,则先调用Number()方法将其转换为数值,然后在进行上面的规则
加性操作符
加法(+)
如果一个操作数是字符串,遵循以下规则:
- 如果两个操作数都是字符串,则进行字符串的拼接
- 如果只有一个操作数是字符串,则将另一个操作数转换为字符串,然后再将两个字符串进行拼接
- 如果有一个操作数是对象、布尔值、数值,则调用他们的toString()方法取得相应的字符串值,然后再应用前面的规则
var result1=5 + 5; alert(result1) ; //10
var result2=5 + “5”; alert(result2); // "55"
var num1=5; var num2=10; var message1="The sum of 5 and 10 is "+ num1 + num2;
alert(message1); //“The sum of 5 and 10 is 510”
var message2="The sum of 5 and 10 is "+( num1 + num2);
alert(message2); //"The sum of 5 and 10 is 15"