7

私がこれを行う場合:

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

obj.hasOwnProperty(i)戻ってきfalseますか?もしそうなら、いつ?

4

2 に答える 2

3

ループ内でhasOwnPropertyを使用するという考え方は、継承されたプロパティをループするときにfalseに解決することです。これにより、ダグラス・クロックフォードが「深い浚渫」と呼ぶものを回避できます。

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
  }
}
于 2012-08-17T16:56:03.780 に答える
1

https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Object/hasOwnPropertyの例-falsehasOwnPropertyを返すことができる場合は表示されません。

これは、次のことを示すテストケースです。

// 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")
    }
}
于 2014-03-17T09:27:16.070 に答える