在 for..in 循环中实现条件

Implement condition in for..in loop

我正在查看来自 MDN 文档的 for..in 教程

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

该示例遍历对象的属性并打印所有内容。仅当对象 属性 的值为 3 时,我才尝试打印。有人可以帮助我了解我哪里出错了。如果可能的话还要解释一下。

const object = { a: 1, b: 2, c: 3 };

for (const property in object.c == 3) {
  console.log(`${property}: ${object[property]}`);
}

for...in 循环不能有条件。¹ 您必须在循环中将条件实现为 if

for (const property in object) {
    if (object[property] === 3) {
        console.log(`${property}: ${object[property]}`);
    }
}

我假设你想要 any 属性 值 3,而不仅仅是 c(因为没有需要循环)。


¹ "for...in 循环不能有条件" 那你为什么没有得到错误呢?因为您的代码在语法上是正确的,所以它没有达到您的预期。

for (const property in object.c == 3)是这样计算的:

  1. 计算object.c == 3的结果。现在我们有:

    for (const property in true) // or `in false`
    
  2. 由于for...in只适用于对象,将布尔基元转换为布尔对象。现在我们有:

    for (const property in new Boolean(true)) // or `in new Boolean(false)`
    
  3. 因为 Boolean 对象没有可枚举的属性,所以循环从不做任何事情。

你必须一步一步地完成每一项任务。 for in 循环用于迭代。之后,您使用 if 条件检查 属性 是否等于 3。检查以下代码:

const object = { a: 1, b: 2, c: 3 };

for (const property in object) {
    if(object[property]===3)
        console.log(`${property}: ${object[property]}`);
}

看起来你想同时使用 for 和 if。

你应该试试这个:

const object = { a: 1, b: 2, c: 3 };

for (const property in object) {
    if(object[property]==3){
        console.log(`${property}: ${object[property]}`);
    }
}