为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

PIPIONE 2022-12-09 15:09:50
嗨,我现在正在学习 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。提前致谢。
查看完整描述

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

}


查看完整回答
反对 回复 2022-12-09
?
人到中年有点甜

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时,您正在检查对象的键而不是值。


查看完整回答
反对 回复 2022-12-09
?
守着星空守着你

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。


查看完整回答
反对 回复 2022-12-09
  • 3 回答
  • 0 关注
  • 84 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信