添加两个空数组:
[] + []
结果是一个空字符串。为什么?
+
运算符只存在于数字和字符串中。当您在另一个类型上使用它时,JavaScript会尝试转换该类型(首先转换为字符串,然后转换为int)。
当数组被强制转换为字符串时,它们将作为逗号分隔的字符串输出。
因此,[] + []
=>"" + ""
=>""
。
另一个例子:[1,2] + [3,4]
=>"1,2" + "3,4"
=>"1,23,4"
相关规范:https://tc39.es/ecma262/#sec-加法运算符加
在JavaScript中,有两种类型的值:基元,包括null
、undefined
、boolean
、string
和number
;其他的都是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命令。