2012-08-17 7 views
7

hasOwnPropertyはfor ... inループの内部から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を返すのだろうか?もしそうなら、いつ?

+0

のみhasOwnPropertyを( "存在しない")はfalseを返します:

はここでことを示していたテストケースです。 – Shreedhar

+0

プロパティは列挙可能ですが、「所有」ではなく継承されます。 –

答えて

3

ループ内でhasOwnPropertyを使用するという考えは、継承されたプロパティをループするときにfalseに解決することです。これにより、Douglas Crockfordが「深い浚渫」と呼ぶことは避けられます。 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 
    } 
} 
+0

あなたはこれの例を挙げることができますか?私は継承されたプロパティがjavascriptにあるのか分かりません。 – Juan

+0

確かに、https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Object/hasOwnProperty –

+2

をチェックしてください。もう一つの例:http://jsfiddle.net/PNmMq/ – PPvG

1

例 - 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") 
    } 
} 
関連する問題