为什么`1 in [1, 2]` 是真的,而`1 in [1]` 是假的?

dsf*_*x3d 0 javascript ecmascript-6

在 JavaScript 中,

1 in [1, 2, ...] // returns true
Run Code Online (Sandbox Code Playgroud)

1 in [1] // returns false
Run Code Online (Sandbox Code Playgroud)

我偶然发现了这种奇怪的行为。在我浏览器的控制台上确认了它。

为什么会这样?

Muh*_*mer 7

数组也是一个对象。

数组如下所示:

{ 
  0: 1,
  1: 2,
  2: 3
  length: 3
}
Run Code Online (Sandbox Code Playgroud)

in 运算符在对象中查找属性名称。

所以当你这样做时 1 in [1]它是错误的,因为对象看起来像这样......

 {
  0: 1,
  length: 1
 }
Run Code Online (Sandbox Code Playgroud)

请注意,没有1以 0 结尾的键名,也称为索引。

你也可以这样做1 in ['a','b'],这是真的......

所以简而言之,JS 中的数组是对象,它们的索引是对象中的键。该in运营商,而它们恰巧是索引键相匹配。