I am looking at for..in tutorial from MDN documentation
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/for…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]}`); }
Advertisement
Answer
for...in
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).
¹ “for...in
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:
Calculate the result of
object.c == 3
. Now we have:for (const property in true) // or `in false`
Since
for...in
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)`
Since
Boolean
objects have no enumerable properties, the loop never does anything.