添加两个空数组: [] + [] 导致一个空字符串。为什么呢?
关于这类奇怪功能集合的任何链接?
答案 0 :(得分:15)
+
运算符仅适用于整数和字符串。当您在其他类型上使用它时,JavaScript会尝试转换类型(首先转换为字符串,然后转换为int)。
当数组转换为字符串时,它们将以逗号分隔的字符串形式输出。
所以,[] + []
=> "" + ""
=> "
。
另一个例子:[1,2] + [3,4]
=> "1,2" + "3,4"
=> "1,23,4"
答案 1 :(得分:3)
因为+
运算符序列化了两个数组并连接了两个结果。序列化是通过Array.prototype.toString
方法完成的,基本上是这样做的:
function () { return this.join(','); }
这两个数组是空的,因此toString
返回的字符串也是空的,两个空字符串也是空字符串。
答案 2 :(得分:1)
在JavaScript中,有两种类型的值;原语包括null
,undefined
,boolean
,string
和number
,其他所有内容都是object
,包括array
添加内容时,JavaScript会将值转换为数字,字符串或基元。内部JavaScript,使用toPrimitive
方法将变量转换为基元。
这是toPrimitive
toPrimitive(input, preferedType);
使用:
[] + []
JS将[]
转换为原语,首先尝试返回数组的valueOf()
:
var arr = [];
arr.valueOf() === arr // true
由于该结果不是原语,因此调用toString()
并返回空字符串(字符串是原始的)。因此,[] + []
的结果是两个空字符串的串联。
答案 3 :(得分:0)
猜测,但我猜测JavaScript正在尝试连接,而不是添加。
答案 4 :(得分:0)
+运算符将尝试将数组转换为字符串。如果要连接两个或更多数组,请使用concat命令。