运算符
算术运算符
加法运算符
JS允许非数值相加,例如布尔值相加,在运算过程中会把布尔值转换为数值。
true + true // 2
1 + true // 2
如果是两个字符串相加,会把他们拼成新的字符串;如果是一个字符串和非字符串相加,会把非字符串转成字符串。
'a' + 'bc' // "abc"
1 + 'a' // "1a"
false + 'a' // "falsea"
加法运算符是在运行时决定,到底是执行相加,还是执行连接。也就是说,运算子的不同,导致了不同的语法行为,这种现象称为“重载”(overload)。
'3' + 4 + 5 // "345"
3 + 4 + '5' // "75"
只有加法运算符存在重载,其他运算符(减法、乘法、除法)都不存在,他们会把字符串自动转为数值,然后再运算。
如果运算符的左右有对象,就会首先调用对象的valueOf
方法,然后再调用对象的toString
方法。
var obj = {
p: 1 };
obj + 2 // "[object Object]2"
var obj = {
p: 1 };
obj.valueOf() // { p: 1 }
obj.valueOf().toString() // "[object Object]"
因此可以通过重写valueOf
方法或toString
方法,来获得我们想要的结果。
var obj = {
valueOf: function () {
return 1;
}
};
obj + 2 // 3
其他运算符
指数运算符: