二元加运算符

减法,乘法,除法在运算过程中,都是先将操作数,转成数值,再进行后续操作,而加法,却有所不一样。

1)两个数值相加

当两个数值相加时,加法运算符,跟减法操作符一样,直接求和。

var a = 1
var b = 2
a + b  // 3

2)字符串相加

当两个字符串相加时,加法运算符,这表现为字符串拼接。

var a = '1'
var b = '2'
a + b  // '12'

注意:只有有一个操作数为,字符串,都视为字符串拼接,另一个操作数,也会先转成字符串

3) 其他原始类型相加

true + false // 1
true + null // 1
true + undefined // NaN 
null + undefined // NaN

4) 对象的相加

如果操作数是一个对象,必须先将其转成一个原始类型,再相加

var obj = { p: 1 }
obj + 2 // '[object Object]2'

上面代码中,对象obj转成原始类型的值为[object Object],再与2相加就得到了上面的结果。

对象转成原始类型的值,规则如下:
首先自动调用对象的valueOf方法

var obj = {
	p: 1
	valueOf() {
		return this.p
	}
}
obj + 2 // 3

再调用toString方法,将其转化为字符串

var obj = { p: 1 };
obj.valueOf().toString() // "[object Object]"

这里有一个特例,如果操作数是一个Date对象的实例,那么会优先执行toString方法

var obj = new Date();
obj.valueOf = function () { return 1 };
obj.toString = function () { return 'hello' };

obj + 2 // "hello2"

猜你喜欢

转载自blog.csdn.net/qq_29055201/article/details/90754678