2016-04-11 8 views
3

So habe ich eine Handvoll von SO-Posts und einige Blogs gelesen, kann aber immer noch nicht herausfinden, warum mein Code nicht funktioniert.Überprüfen Sie, ob Javascript Objekt/Eigenschaft definiert ist

Mein Code:

function myFunct(d) { 
    if (typeof d.parent.name == "undefined") { 
     console.log("undefined") ;} else { console.log("defined") ;} 
    } 

d ist ein Objekt, das etwas wie folgt aussieht:

Object { 
children: Object, 
count: 676 
} 

Ich habe versucht, mit (!d.parent.name), hasOwnProperty, === und wie oben typeof verwenden. Irgendwelche Vorschläge?

Der Fehler Ich erhalte ist TypeError: d.parent.name is undefined

UPDATE:

Ok danke allen für die Eingabe, und ich entschuldige mich, wenn die Frage verwirrend war. Ich war tatsächlich auf der Suche nach d.parent.parent, aber versuchte, die Frage zu vereinfachen, indem Sie d.parent verwenden. Ich denke, das Problem ist, dass d.parent nicht definiert ist, so dass es nicht einmal zu d.parent.parent. Entschuldigung, dass ich nicht genauer bin!

+0

@ ForceMagic Ich erhalte den gleichen Fehler. – As3adTintin

+1

'typeof Object === 'undefined'' ist eine gültige Möglichkeit, typeof – NickSlash

+0

@NickSlash sry, meine schlechte :) – ForceMagic

Antwort

5

Wenn Sie eine undefinierte sichere Überprüfung des ganzen Weg hinunter Ihren Objektbaum möchten, können Sie verwenden:

if(typeof(((d || {}).parent || {}).name) === 'undefined') { 

} 

Wenn Sie den Luxus, Lodash zur Verfügung haben:

var d = { 
    parent: { 
      name: "Joe" 
    } 
}; 

if (typeof (_.get(d, "parent.name")) === 'undefined') { 

} 
+0

interessant, danke @jellyraptor – As3adTintin

2
if(typeof x === 'undefined') 

Verwenden Sie dies, es prüft für Typ sowie Wert, das ist was Sie brauchen.

+0

Danke für die Eingabe, aber ich bekomme immer noch den gleichen Fehler – As3adTintin

+0

Sind Sie sicher, dass Sie auf einen vorhandenen Wert verweisen? – ForceMagic

+1

Ya @ As3adTintin, wenn aus irgendeinem Grund d.parent selbst undefiniert ist, wird das Skript Fehler aus, bevor es sogar zu überprüfen d.parent.name, beachten Sie, dass – labago

4

Versuchen Sie, alle Kinder mit logischen OR

if (typeof d == "undefined" || 
    typeof d.parent == "undefined" || 
    typeof d.parent.name == "undefined") { 
// ... 
} 
+0

Gah Ich bekomme den gleichen Fehler ... Ich muss wirklich etwas falsch machen. Danke aber für die Vorschläge! – As3adTintin

+1

Append 'typeof d ==" undefined "||' an den Anfang der if-Bedingung – ForceMagic

0

ich den Fehler Eigentum Kennung parent glauben zu überprüfen. Sind Sie sicher, dass Ihr Objekt die Eigenschaft hat? Der Bezeichner d ist möglicherweise ungültig, weil parent nicht existiert.