2014-03-29 28 views
26

Es gibt mehrere Antworten hier, wie Sie überprüfen können, ob eine Eigenschaft in einem Objekt vorhanden ist.Javascript: Überprüfen Sie, ob Objekt Eigenschaften hat

ich immer

wurde unter Verwendung
if(myObj.hasOwnProperty('propName')) 

aber ich frage mich, ob es einen Unterschied von

if('propName' in myObj){ 
+1

warum nicht nur "if (myObj.propName)"? – Dunken

+0

http://jsperf.com/hasownproperty-vs-in-vs-undefined/17 –

+0

Hey Leute, danke - Entschuldigung, habe die erwähnte dup nicht gefunden. – sebilasse

Antwort

41

Sie fast gleich sind, ist der Unterschied, dass hasOwnProperty nicht nach unten überprüfen Sie die Prototypkette, während in tut.

Ein Beispiel

var test = function() {} 

test.prototype.newProp = function() {} 

var instance = new test(); 

instance.hasOwnProperty('newProp'); // false 
'newProp' in instance // true 

FIDDLE

Wie bereits erwähnt, nur Object.hasOwnProperty kehrt "eigene Eigenschaften", das heißt Eigenschaften, die direkt zugesetzt werden, und ohne Zusatz von Eigenschaften der prototype.

4

Ja, es gibt einen Unterschied. hasOwnProperty() ignoriert Eigenschaften und Methoden, die mit hinzugefügt werden. Ich versuche es mit Beispielen zu erklären. Wenn Sie zum Beispiel Prototyp des Objekts haben

Object.prototype.something = function() {}; 

Und lassen Sie uns sagen, Sie haben folgende object

var obj = { 
    "a" : "one", 
    "b" : "two" 
}; 

Und Schleife:

for (var i in obj) { 
    //if (obj.hasOwnProperty(i)) { 
     console.log(obj[i]); 
    //} 
} 

Ohne hasOwnProperty wird es Ausgabe one two function(), während mit hasOwnProperty() Verfahren nur one two

Vergleichen Sie die Unterschiede zwischen First und Second DEMOS

Verwandte Themen