Will hasOwnProperty ever return false from the inside for for ... in loop?

If I do this:

for (var i in obj) { if (obj.hasOwnProperty(i)) console.log("Has property: " + i); else console.log("Doesn't have property: " + i); } 

Will obj.hasOwnProperty(i) ever return false ? If so, when?

+7
source share
2 answers

The idea of ​​using hasOwnProperty in a loop is to allow false when navigating through inherited properties. This avoids what Douglas Crockford refers to as a "deep-sea excavator."

Example from https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Object/hasOwnProperty :

 var buz = { fog: 'stack' }; for (var name in buz) { if (buz.hasOwnProperty(name)) { alert("this is fog (" + name + ") for sure. Value: " + buz[name]); } else { alert(name); // toString or something else } } 
+3
source

Example from https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Object/hasOwnProperty - is not displayed when hasOwnProperty can return false.

Here's a test case that shows that:

 // From some library or earlier in your code Object.prototype.xxx = "xxx"; // Your object var data = { member: "member" }; for (var key in data) { if( data.hasOwnProperty(key) ) { alert(key); // alert("member") } else { alert(key); // alert("xxx") } } 
+1
source

All Articles