我想将一个数组的元素添加到另一个数组中,所以我尝试了一下:
[1,2] + [3,4]
它回应:
"1,23,4"
到底是怎么回事?
在+
操作者没有为数组定义。
发生的事情是Javascript 将数组转换为字符串并将其连接起来。
由于这个问题以及我的回答引起了很多关注,因此我认为对操作员的总体行为进行概述也将是有用且相关的+
。
所以,就到这里。
除E4X和特定于实现的内容外,Javascript(自ES5起)具有6种内置数据类型:
请注意,尽管对于Null和可调用对象而言,typeof
返回值有些混乱 ,但实际上Null不是对象,严格来说,在符合规范的Javascript实现中,所有函数都被视为对象。object
function
没错-Javascript 没有原始数组;只有Array
使用某种语法糖来调用对象的实例才能缓解这种痛苦。
添加更多的混乱,包装等实体new Number(5)
,new Boolean(true)
并且new String("abc")
是所有object
类型,而不是数字,布尔值或字符串正如人们所预料。不过对于算术运算符Number
,其Boolean
行为与数字相同。
容易吧?有了这些,我们就可以继续进行概述了。
+
按操作数类型的不同结果类型
|| undefined | null | boolean | number | string | object |
=========================================================================
undefined || number | number | number | number | string | string |
null || number | number | number | number | string | string |
boolean || number | number | number | number | string | string |
number || number | number | number | number | string | string |
string || string | string | string | string | string | string |
object || string | string | string | string | string | string |
*适用于Chrome13,FF6,Opera11和IE9。读者可以自己检查其他浏览器和版本。
注意:如CMS所指出的那样,对于某些情况下的对象(例如和)Number
,Boolean
自定义+
操作符不一定会产生字符串结果。它可以根据对象到原始转换的实现而有所不同。例如,var o = { valueOf:function () { return 4; } };
评估o + 2;
产品6
a number
,评估o + '2'
产品'42'
a string
。
要查看概述表是如何生成的,请访问http://jsfiddle.net/1obxuc7m/
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句