javascript - Will hasOwnProperty ever return false from inside a for...in loop? - Stack Overflow

If I do this: for (var i in obj) {if (obj.hasOwnProperty(i)) console.log("Has property: " + i

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?

Share Improve this question asked Aug 17, 2012 at 16:52 JuanJuan 15.7k24 gold badges110 silver badges192 bronze badges 2
  • 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
Add a ment  | 

2 Answers 2

Reset to default 3

The 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条)

  • 暂无评论

联系我们

400-800-8888

在线咨询: QQ交谈

邮件:admin@example.com

工作时间:周一至周五,9:30-18:30,节假日休息

关注微信