当 1 不在数组中时,Javascript 嵌套 if 语句

嗨,我现在正在学习 if 语句……请耐心等待


let x = [3,4,5,6,7]

if(3 in x){

  if(1 in x){

    console.log(1 in x)

  }

}



console.log(8 in x)

console.log(1000 in x)


只是想知道为什么 console.log(1 in x)可以是真的?因为 x 中没有 1。提前致谢。


PIPIONE
浏览 85回答 3
3回答

慕沐林林

您的数组有 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。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript