2017-01-10 1 views
2

Lassen Sie uns sagen, ich habe ein Objekt namens John mit vielen anderen verschachtelten Objekten innerhalb und ich versuche, sie Art und Weise folgende für den Zugriff aufVerschachtelte Objekte, verhindert „nicht Wert‚undefiniert‘get“

if (john.address.highstreet) { 
    var highstreet = john.address.highstreet 
} 

aber wenn Adresse Eigentum null ist, dann werde ich

unable to get property 'highstreet' of undefined 

und meine Funktion stoppt die Ausführung ist

einen Fehler es eine Möglichkeit, verschachtelte Eigenschaften nutzen, ohne die Anweisung viele verschachtelte zu machen, wenn s wie es unten gezeigt:

if (john.address) { 
    if (john.address.highstreet) { 
     var highstreet = john.address.highstreet 
    } 
} 
+1

ich so etwas wie lodash des verwenden würde [get] (https://lodash.com/docs/4.17.4# bekommen) –

Antwort

6

Der üblicher Weg

if (john.address && john.address.highstreet) { 
    var highstreet = john.address.highstreet 
} 

würde, wenn Adresse nicht definiert ist dann das, was zurückgegeben werden ist.

+0

danke! Das scheint der beste Weg zu sein. –

+1

Beachten Sie, dass dies funktioniert, weil boolesche JavaScript-Operatoren [short-circuiting] sind (https://en.wikipedia.org/wiki/Short-circuit_evaluation). –

+0

tatsächlich. Daher ist es "&&" und nicht nur "&" - die gleiche Konvention wie C –

1

Sie möchten wahrscheinlich etwas cleverer auf diese Eigenschaften zugreifen. So etwas wie getPropertyByString("john.address.highstreet"). Diese Funktion könnte null oder undefined zurückgeben, wenn der Pfad nicht aufgelöst werden kann.

Wie in Alnitak's response

So könnte Ihr Code wie folgt aussehen:

var highstreet = getPropertyByString("john.address.highstreet"); 
0

Eine Alternative könnte ein Try-Catch-Block zu verwenden.

try { 
    var highstreet = john.address.highstreet; 
} catch (err) { 
    // do error handling 
} 
0

Sie auch hasOwnProperty Methode verwenden, können Sie für Eigenschaft überprüfen

if(john.hasOwnProperty("address") && john.address.hasOwnProperty("highstreet")) 
{ 
var highstreet = john.address.highstreet 
} 
Verwandte Themen