【问题标题】:why `1 in [1, 2]` is true but `1 in [1]` is false? [duplicate]为什么 `1 in [1, 2]` 为真,但 `1 in [1]` 为假? [复制]
【发布时间】:2020-08-29 20:02:33
【问题描述】:

在javascript中,

1 in [1, 2, ...] // returns true

但是

1 in [1] // returns false

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

为什么会这样?

【问题讨论】:

标签: javascript ecmascript-6


【解决方案1】:

数组也是一个对象。

数组如下所示:

{ 
  0: 1,
  1: 2,
  2: 3
  length: 3
}

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

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

 {
  0: 1,
  length: 1
 }

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

1 in ['a','b'],你也可以这样做……

所以简而言之,JS 中的数组是对象,它们的索引是对象中的键。 in 运算符与恰好是索引的键匹配。

【讨论】:

  • 大声笑,我应该先检查文档。谢谢
  • 我相信这是一种常见的误解,我很确定我曾经也这么认为。不要忘记接受答案。
【解决方案2】:

因为如果值作为对象中的键存在,则 in 运算符返回 true。在第一种情况下,存在“1”,因为数组包含索引 0 和 1。在第二种情况下,数组仅包含“0”索引

【讨论】:

  • 根据您的要求,您应该更好地使用 indexOf 方法,例如var arr= [1, 2, 3, ....]; var a = arr.indexOf(2);像这样
猜你喜欢
  • 1970-01-01
  • 2011-12-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-06-08
  • 1970-01-01
  • 2020-06-26
  • 1970-01-01
相关资源
最近更新 更多