如果我這樣做:Will hasOwnProperty會從for循環中返回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
?如果是這樣,何時?
如果我這樣做:Will hasOwnProperty會從for循環中返回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
示例: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
}
}
示例 - 不顯示時hasOwnProperty
可以返回false。
這是一個測試案例,它表明:
// 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")
}
}
只有hasOwnProperty( 「不存在」)將返回false。 – Shreedhar 2012-08-17 16:55:49
當屬性是可枚舉的,但不是「擁有」並繼承。 – 2012-08-17 17:03:50