-
慕沐林林
您的数组有 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}
-
人到中年有点甜
要理解这种行为,我们需要研究in 运算符。让我们引用 MDN:如果指定属性在指定对象或其原型链中,则 in 运算符返回 true。在 JavaScript 中,数组是底层的对象。当您键入 时if (1 in x),您实际上是在检查该x对象是否具有名为 的属性1。让我们仔细检查一下您的代码:let x = [3,4,5,6,7]由于数组有 5 个元素,因此x对象有 5 个属性:0 in x // true1 in x // true2 in x // true3 in x // true4 in x // true5 in x // false!总结:当您使用in operator时,您正在检查对象的键而不是值。
-
守着星空守着你
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。