JavaScript中的+操作符
二元+操作符可用于数值操作数的和或者拼接字符串操作数。
+操作符优先于字符串拼接:只要有操作数是字符串或者可以转换称字符串的对象。林一个操作数也会被转换为字符串并执行拼接操作。只要有任何操作数都不是字符串或字符串值时才会执行加法操作。
+操作符的行为如下:
- 如果一个操作数是对象,则+操作符使用对象到原始值的算法把该对象转换成原始值。Date对象用toString()方法来转换,其他对象通过valueOf()转换(如果这个对象返回原始值)。不过,多数对象并没有valueOF()方法,因此它们也会通过toString()方法转换。
- 完成对象到原始值的转换后,如果有操作数是字符串,另一个操作数也会被转换成字符串并进行拼接。
- 否则,两个操作数都被转换成数值(或NaN),计算加法。
eg:
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"
第一行没有圆括号,+操作符表现出左结合性,即两个数值先相加,然后它们的和再与字符串拼接。第二行的圆括号改变了操作执行的顺序:数值2先于字符串拼接产生一个新字符串,然后数值1再与新字符串拼接得到最终结果。