首页 > 解决方案 > JavaScript 中的对象检查问题

问题描述

在这段代码中,我正在检查obj中的每个键是否都是arr的平方值。还检查obj的值是否等于arr的相应值数量。所以我正在迭代arr并通过使用in 运算符检查key ** 2是否存在于obj中,如果不执行 console.log("false") 如果是则减去 obj 的属性并执行 console.log("true")

let obj = {
  1: 1,
  4: 1,
  9: 1,
  25: 2,
};

let arr = [1, 2, 3, 2, 5];

for (let key of arr) {
  if (!(key ** 2 in obj)) {
    console.log("false");
  } else {
    obj[key ** 2] -= 1;
    console.log(obj);
    console.log("true");
  }
}
在此处输入图像描述

在这里,我用(obj[key ** 2])更改了 in 运算符,所以我的问题不是如何正确解决任务,我的问题是为什么in 运算符"(obj[key ** 2])"他们按照他们的方式行事?在in 运算符情况下 -1 的减法继续,但在第二种情况下,当obj的键为 4 且属性为 0 时停止减法,这意味着!(obj[2 ** 2])为真,因此记录“错误的”。

那么,为什么在这两种情况下他们都按照自己的方式行事呢?有什么规则或类似的东西吗?我认为第一种情况似乎更合乎逻辑,在此先感谢

let obj = {
  1: 1,
  4: 1,
  9: 1,
  25: 2,
};

let arr = [1, 2, 3, 2, 5];

for (let key of arr) {
  if (!(obj[key ** 2])) {
    console.log("false");
  } else {
    obj[key ** 2] -= 1;
    console.log(obj);
    console.log("true");
  }
}
在此处输入图像描述

标签: javascript

解决方案


in如果指定属性在指定对象或其原​​型链中,则运算符返回 true 。obj[key]返回该键的值。所以当obj[4]成为条件执行0的第一个块时。if作为if(!0) == true

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/in

在您的第一个代码中,您正在检查带有!(keys ** 2 in obj). 每当键匹配时,它就会返回true。由于if(!true) == false第一个if语句块被跳过。


推荐阅读