为什么 “,,,” == Array(4) 在 Javascript 中?

2022-08-30 05:06:00

启动您的口译员/控制台并尝试比较

> ",,," == Array(4)
True

为什么?起初我想,也许既然你可以把“,,,”想象成一个由四个字符组成的数组,结尾是“\0”,那可能是原因,但是

> "..." == Array(4)

返回“False”。所以。。。为什么?我知道这是Javascript中一些特殊的鸭子打字,但只是好奇是什么强调了这种行为。顺便说一句,从Zed Shaw的精彩演讲中收集了这一点


答案 1

因为右手操作数被转换为字符串,并且 的字符串表示形式为:Array(4),,,

> Array(4).toString()
  ",,,"

如果使用数组构造函数并传递一个数字,则会将数组的长度设置为该数字。因此,您可以说您有四个空索引(与 相同),数组的默认字符串表示形式是其元素的逗号分隔列表:[,,,]

> ['a','b','c'].toString()
  "a,b,c"

该规范的第 11.9.3 节描述了比较的工作原理。在那里你会看到():x == y

8. 如果 Type(x) 是 String 或 Number,而 Type(y) 是 Object,
则返回比较结果 x == ToPrimitivey)。

(数组是 JavaScript 中的对象)

如果您按照该方法操作,您最终会发现它调用 .ToPrimitivetoString


答案 2

内部发展

",,," == Array(4).toString()