Javascript:数组加号

时间:2013-10-01 12:44:31

标签: javascript

javascript中的某些操作会返回意外结果。一个是非常奇怪的:

[] + 1 = "1"

有人可以解释为什么会这样吗?

3 个答案:

答案 0 :(得分:4)

由于+运算符,

[]被转换为空字符串。所以“”+ 1 => “1”(数字也转换为字符串)

答案 1 :(得分:1)

Javascript在不同类型之间添加的规则如下:

鉴于以下补充。

value1 + value2

要评估此表达式,请执行以下步骤(第11.6.1节): 将两个操作数转换为基元(数学符号,而不是JavaScript):

prim1 := ToPrimitive(value1)
prim2 := ToPrimitive(value2)

省略PreferredType,因此非日期的数字,日期的字符串。 如果prim1或prim2是一个字符串,则将两者都转换为字符串并返回结果的串联。

否则,将prim1和prim2都转换为数字并返回结果的总和。

Source

在这种情况下,数组将转换为空字符串,然后+执行字符串连接

答案 2 :(得分:1)

ECMAScript 11.6.1定义了补充。为每个操作数添加调用ToPrimitive9.1)的步骤5和6,并对这些结果进行操作:

  • 对于数组(或任何对象),ToPrimative调用对象的toString方法。在空数组上调用toString的结果是空字符串(根据15.4.4.2中描述的行为。

  • 对于数字,ToPrimitive返回数字(因为数字已经是原始数据)。

我们要添加空字符串和数字1.当另外一个操作数是一个字符串时,加法作为连接操作(每个加法的步骤7),所以我们最终得到"" + "1" = "1"