Skip to content

Implement condition in loop

I am looking at tutorial from MDN documentation…in

The example iterates over the object’s properties and prints all. I am trying to print only if value of object’s property is 3. Can someone please help me understand where I am going wrong. And also if possible explain.

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

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

Answer loops can’t have conditions.¹ You have to implement the condition as an if within the loop:

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

I’ve assumed you want any property with the value 3, not just c (since there’d be no need for a loop).

¹ loops can’t have conditions” So why didn’t you get an error? Because your code was syntactically correct, it just didn’t do what you expected. 🙂

The for (const property in object.c == 3) is evaluated like this:

  1. Calculate the result of object.c == 3. Now we have:

    for (const property in true) // or `in false`
  2. Since only works on objects, convert the boolean primitive to a Boolean object. Now we have:

    for (const property in new Boolean(true)) // or `in new Boolean(false)`
  3. Since Boolean objects have no enumerable properties, the loop never does anything.