私がこれを行う場合:
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
ますか?もしそうなら、いつ?
私がこれを行う場合:
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
ますか?もしそうなら、いつ?
ループ内で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
}
}
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")
}
}