JavaScript的加号运算符
先上结果(来自 http://stackoverflow.com/questions/7124884/why-is-1-2-3-4-1-23-4-in-javascript):
不同类型操作数相加后的类型如下表:
undefined | null | boolean | number | string | |
undefined | number | number | number | number | string |
null | number | number | number | number | string |
boolean | number | number | number | number | string |
number | number | number | number | number | string |
string | string | string | string | string | string |
operand+operand=result
相加规则:
1.如果操作数中有一个是对象,它会先尝试valueOf()方法
,若返回的值不是原始值,则调用tostring()方法,然后用返回值进行运算。
2.如果操作数中有一个是字符串,另一个也会被转换为字符串,然后连接在一起,组成新的字符串。
3.其他情况下,两个操作数会转换为数字,执行相加运算。
示例(用例结果为Firefox(49.0.2)下的结果):
1.数字+undefined
var result=12+undefined;//NaN
2.数字+null
var result=12+null;//12
3.数字+string
var result=12+'12';//1212
4.boolean+null
var result=true+null;//1
5.boolean+string
var result=true+'we';//truewe
6.数字+数组
var result=12+[1,2,3];//121,2,3
[]会被转换为原始值,先尝试valueOf()方法,返回数组本身,再调用toString()方法,返回字符串1,2,3;
7.数字+对象
var result=12+{};//12[object Object]
空对象{}被转换为字符串[object Object],数字也被转换为字符串,两个操作数再进行连接。
8.{}+{}
var result={}+{};//[object Object][object Object]
var result='b'+{};//b[object Object]
var result={}+'b';//[object Object]b
var result={}+[];//[object Object]