JavaScript事与愿违的+

发布时间:2018-12-18 作者:一点通


如何将两个数组拼成一个数组呢?也许有的同学会想到

[1, 2, 3] + [4, 5, 6]

然而上面这段代码的结果并非[1, 2, 3, 4, 5, 6],而是1,2,34,5,6,貌似有点跑偏了,为什么会出现这样的结果呢?

如果 + 两边的类型不是数字或字符串的时候,会进行一定的类型转换,优先考虑转换为字符串并连接。如果其中一个操作数是对象,则会遵循对象到原始值的转换规则转换为原始值,一次选择valueOftoString方法进行转换

所以就会出现下面的转换过程

[1, 2, 3].toString() // -> "1,2,3"
[4, 5, 6].toString() // -> "4,5,6"

在进行了对象到原始值的转换后,如果其中一个操作数是字符串的话,另外一个也会变成字符串,然后进行拼接

恰好这俩也都是字符串"1,2,3" + "4,5,6"拼接得到结果1,2,34,5,6

由此可推导出下面的表达式结果:

[1, 2, 3] + {name: "tom"}

({name: "tom"}).toString()等于"[object Object]",所以最终结果是"1,2,3[object Object]"