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?
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?
- only hasOwnProperty("non-existing") will return false. – Shreedhar Commented Aug 17, 2012 at 16:55
- When property is enumerable, but not "own" and inherited instead. – Oleg V. Volkov Commented Aug 17, 2012 at 17:03
2 Answers
Reset to default 3The idea of using hasOwnProperty within a loop is to resolve to false when looping over inherited properties. This avoids what Douglas Crockford refers to as a "deep-dredge."
Example from https://developer.mozilla/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
}
}
Example from https://developer.mozilla/en-US/docs/JavaScript/Reference/Global_Objects/Object/hasOwnProperty - doesn't show when hasOwnProperty
can return false.
Here's a test case that does show 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")
}
}
发布者:admin,转转请注明出处:http://www.yc00.com/questions/1745147534a4613714.html
评论列表(0条)