2012-08-17 12 views
7

Gdybym to zrobić:Czy hasOwnProperty kiedykolwiek zwróci false z wnętrza pętli for ... in?

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) kiedykolwiek powrócić false? Jeśli tak, to kiedy?

+0

tylko hasOwnProperty ("nieistniejącą") zwróci false. – Shreedhar

+0

Gdy właściwość jest przeliczalna, ale nie "własna" i zamiast niej dziedziczona. –

Odpowiedz

3

Ideą użycia hasOwnProperty w pętli jest zamiana na wartość false podczas zapętlenia odziedziczonych właściwości. Pozwala to uniknąć tego, co Douglas Crockford określa jako "pogłębiarkę".

przykład z 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

Czy możesz podać i przykład tego? Nie jestem pewien, co dziedziczona właściwość jest w javascript. – Juan

+0

Oczywiście, sprawdź https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Object/hasOwnProperty –

+2

Kolejny przykład: http://jsfiddle.net/PNmMq/ – PPvG

1

przykład z https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Object/hasOwnProperty - nie wykazują podczas hasOwnProperty może powrócić fałszywe.

Oto przypadek test, który ma pokazać, że:

// 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") 
    } 
} 
Powiązane problemy