为什么在JavaScript中添加两个空数组的结果是字符串?

时间:2012-02-15 20:37:22

标签: javascript

添加两个空数组:     [] + [] 导致一个空字符串。为什么呢?

关于这类奇怪功能集合的任何链接?

5 个答案:

答案 0 :(得分:15)

+运算符仅适用于整数和字符串。当您在其他类型上使用它时,JavaScript会尝试转换类型(首先转换为字符串,然后转换为int)。

当数组转换为字符串时,它们将以逗号分隔的字符串形式输出。

所以,[] + [] => "" + "" => "

另一个例子:[1,2] + [3,4] => "1,2" + "3,4" => "1,23,4"

相关规范: http://es5.github.com/#x11.6.1

答案 1 :(得分:3)

因为+运算符序列化了两个数组并连接了两个结果。序列化是通过Array.prototype.toString方法完成的,基本上是这样做的:

function () { return this.join(','); }

这两个数组是空的,因此toString返回的字符串也是空的,两个空字符串也是空字符串。

答案 2 :(得分:1)

在JavaScript中,有两种类型的值;原语包括nullundefinedbooleanstringnumber,其他所有内容都是object,包括array

添加内容时,JavaScript会将值转换为数字,字符串或基元。内部JavaScript,使用toPrimitive方法将变量转换为基元。

这是toPrimitive

的签名
toPrimitive(input, preferedType);

使用:

[] + []

JS将[]转换为原语,首先尝试返回数组的valueOf()

var arr = [];
arr.valueOf() === arr // true

由于该结果不是原语,因此调用toString()并返回空字符串(字符串是原始的)。因此,[] + []的结果是两个空字符串的串联。

答案 3 :(得分:0)

猜测,但我猜测JavaScript正在尝试连接,而不是添加。

答案 4 :(得分:0)

+运算符将尝试将数组转换为字符串。如果要连接两个或更多数组,请使用concat命令。