2.5.4乘性操作符
ECMAScript定义了3个乘性操作符:乘法、除法和求模。如果参与乘性计算的某个操作数不是数值,后台会先使用Number()函数将其转换成数值。(空字符串变成0,true变成1)
1.乘法(*)
在处理特殊值的情况下,乘法操作符遵循下列的规则:
#如果操作数都是数值,就执行常规的乘法计算。如果超出了ECMAScript数值的范围,则返回Infinity或-Infinity
#如果有一个操作数是NaN,则结果是NaN
#如果是Infinity与0相乘,则结果是NaN
#如果是Infinity与非0数值相乘,结果是Infinity或-Infinity
#如果是Infinity与Infinity相乘,则结果是Infinity
#如果有一个操作数不是数值,则在后台调用Number()将其转换为数值,然后再应用上面的规则。
2.除法(/)
在处理特殊值的情况下,除法操作符遵循下列的规则:
#如果操作数都是数值,就执行常规的除法计算。如果超出了ECMAScript数值的范围,则返回Infinity或-Infinity
#如果有一个操作数是NaN,则结果是NaN
#如果是Infinity除以Infinity相除,则结果是NaN
#如果是0除以0,结果是NaN
#如果是非0的有限数除以0,则结果是Infinity或-Infinity
#如果是Infinity除以非零数,则结果是Infinity或-Inifinity。
#如果有一个操作数不是数值,则在后台调用Number()将其转换为数值,然后再应用上面的规则。
3.求模(%)
在处理特殊值的情况下,除法操作符遵循下列的规则:
#如果操作数都是数值,就执行常规的除法计算,取得余数。
#如果被除数是无穷大而除数是有限大的数值,则结果是NaN
#如果被除数是有限大而除数是0,则结果是NaN
#如果是Infinity被Infinity除,则结果是NaN
#如果被除数是有限大的数值而除数是无穷大的数值,则结果是被除数;
#如果被除数是0,则结果是0;
#如果有一个操作数不是数值,则在后台调用Number()将其转换为数值,然后再应用上面的规则。
2.5.5加性操作
1.加法(+)
如果两个操作数都是数值,执行常规的加法计算,然后根据下列规则返回结果:
#如果有一个操作数是NaN,则结果是NaN
#如果是Infinity加Inifinity,则结果是Infinity;
#如果是-Infinity加-Inifinity,则结果是-Infinity
#如果是Infinity加-Infinity,则结果是NaN
#如果是+0加+0,则结果是+0;
#如果是-0加-0,则结果是-0;
#如果是+0加-0,则结果是+0.
如果有一个操作数是字符串,那么遵循以下规则:
#如果两个操作数是字符串,则将第二个操作数与第一个操作数拼接起来
#如果只有一个操作数是字符串,则将另一个操作数转换为字符串,然后将两个字符串拼接起来
如果有一个操作数是对象、数值或布尔值,则调用它们的toString()方法取得相应的字符串值。对于undefined和null,则分别调用String()函数并取得"undefined"和"null".
2.减法(-)
减法与加法类似,需要遵循以下规则:
#如果两个操作数都是数值,则按常规的算术减法运算。
#如果有一个操作数是NaN,则结果是NaN
#如果是Infinity减Infinity,则结果是NaN
#如果是-Infinity减Infinity,则结果是-Infinity
#如果是Infinity减Infinity,则结果是Infinity
#如果是+0减+0,则结果是+0;
#如果是+0减-0,则结果是-0;
#如果是-0减-0,则结果是+0;
#如果有一个操作数是字符串、布尔值、null或undefined,则先在后台调用Number()函数将其转为数值,然后进行减法运算。
#如果有一个操作数是对象,则调用对象的valueOf()方法以取得表示对象的数值。如果对象没有valueOf()方法,则调用toString()方法并将得到的字符串转换为数值。