3 回答
TA贡献2016条经验 获得超9个赞
您的数组有 5 个元素,索引从 0 到 4。每个语句都会得到 true,0 - 4 in x因为它正在检查您的数组是否在给定索引处有一个元素。如果你想检查一个数组是否包含一个元素,我建议你使用includes。
if (x.includes(1))
{
// Should never enter here since your array has no element of value 1
}
TA贡献1895条经验 获得超7个赞
要理解这种行为,我们需要研究in 运算符。
让我们引用 MDN:
如果指定属性在指定对象或其原型链中,则 in 运算符返回 true。
在 JavaScript 中,数组是底层的对象。当您键入 时if (1 in x)
,您实际上是在检查该x
对象是否具有名为 的属性1
。
让我们仔细检查一下您的代码:
let x = [3,4,5,6,7]
由于数组有 5 个元素,因此x
对象有 5 个属性:
0 in x // true
1 in x // true
2 in x // true
3 in x // true
4 in x // true
5 in x // false!
总结:当您使用in operator时,您正在检查对象的键而不是值。
TA贡献1799条经验 获得超8个赞
MDN ( https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/in ) 中解释了基本原理,但基本原理是in运算符检查对象的属性,因为在javascript 数组是一个对象,因为您创建的数组可以表示为:
let y = {
'0': 3,
'1': 4,
'2': 5,
'3': 6,
'4': 7
}
因此,您可以通过索引访问数组元素,这在 javascript 中与访问对象的属性相同。所以你的 x[0] 类似于我的 y[0] 并且都返回 3。所以在你的例子中你将有2 in x === true等等0 in x === true。
添加回答
举报