2

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

[] + 1 = "1"

任何人都可以解释为什么它会这样工作吗?

4

3 回答 3

4

[]由于 + 运算符,被转换为空字符串。所以 "" + 1 => "1" (数字也转换为字符串)

于 2013-10-01T12:46:41.603 回答
1

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

鉴于以下补充。

value1 + value2

为了评估这个表达式,需要执行以下步骤(§11.6.1): 将两个操作数都转换为基元(数学符号,而不是 JavaScript):

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

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

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

资源

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

于 2013-10-01T12:48:41.043 回答
1

ECMAScript 11.6.1定义了加法。加法的步骤 5 和 6对每个操作数调用ToPrimitive( 9.1 ) 并对这些结果进行操作:

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

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

我们剩下的是添加空字符串和数字 1。当加法的任一操作数是字符串时,加法作为连接操作(按照加法的第 7 步),所以我们以"" + "1" = "1".

于 2013-10-01T12:52:27.030 回答