我想将一个数组的元素添加到另一个数组中,所以我try 了以下方法:
[1,2] + [3,4]
它的回应是:
"1,23,4"
怎么一回事?
我想将一个数组的元素添加到另一个数组中,所以我try 了以下方法:
[1,2] + [3,4]
它的回应是:
"1,23,4"
怎么一回事?
+
号接线员is not defined for arrays.
发生的是Javascript converts arrays into strings并将它们连接在一起.
由于这个问题以及我的答案得到了很多关注,我觉得这将是有用的和相关的,有一个关于+
运算符一般行为的overview.
所以,它开始了.
不包括E4X和特定于实现的东西,Javascript(截至ES5)有6个内置data types:
注意,尽管typeof
somewhat confusingly returns object
表示空,function
表示可调用对象,但空实际上不是一个对象,严格来说,在符合规范的Javascript实现中,所有函数都被视为对象.
没错-Javascript本身就有no primitive arrays;只有一个名为Array
的对象的实例加了一些语法糖来减轻痛苦.
除了念力之外,包装器实体(如new 数字(5)
new 布尔值(true)
和new 一串("abc")
Wrapper)都是object
型的,而不是人们想象的数字、布尔值或字符串.然而,对于算术运算符数字
和布尔值
而言,它们表现为数字.
放松点,嗯?有了所有这些,我们可以进入概述本身.
Different result types of 100 by operand types
|| 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.判断其他浏览器和版本留给读者练习.
Note:正如CMS所指出的,对于对象的某些情况,例如数字
、布尔值
和自定义对象,+
运算符不一定产生字符串结果.它可以根据对象到基本体转换的实现而变化.例如,var o = { valueOf:function () { return 4; } };
判断o + 2;
产生6
,number
,判断o + '2'
产生'42'
,string
.
要查看概览表是如何生成的,请访问http://jsfiddle.net/1obxuc7m/