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



添加两个空数组:

[] + []

结果是一个空字符串。为什么?

+运算符只存在于数字和字符串中。当您在另一个类型上使用它时,JavaScript会尝试转换该类型(首先转换为字符串,然后转换为int)。

当数组被强制转换为字符串时,它们将作为逗号分隔的字符串输出。

因此,[] + []=>"" + ""=>""

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

相关规范:https://tc39.es/ecma262/#sec-加法运算符加

在JavaScript中,有两种类型的值:基元,包括nullundefinedbooleanstringnumber;其他的都是object,包括array

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

这是toPrimitive:的签名

toPrimitive(input, preferedType);

使用[] + [],JavaScript将[]转换为基元,首先尝试返回数组的valueOf()

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

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

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

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

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

推测,但我猜JavaScript正在尝试串联,而不是addton。

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

最新更新