2014-05-12 2 views
7

In Javascript möchte ich oft auf das Attribut eines Objekts zugreifen, das möglicherweise nicht vorhanden ist.Zugriff auf eine Eigenschaft eines manchmal Null-Objekts ohne einen Fehler

Zum Beispiel:

var foo = someObject.myProperty

Dies wird jedoch einen Fehler aus, wenn nicht someobject definiert ist. Was ist der herkömmliche Weg, um auf Eigenschaften von möglicherweise Null-Objekten zuzugreifen und einfach false oder null zurückzugeben, wenn es nicht existiert?

In Ruby kann ich someObject.try(:myProperty) tun. Gibt es ein JS-Äquivalent?

+0

Um zu überprüfen, ob seine Art nicht definiert ist ein Weg. – melancia

Antwort

2

Das glaube ich nicht, dass es eine direkte Entsprechung von dem, was Sie in JavaScript fragen. Aber wir können einige util-Methoden schreiben, die dasselbe tun.

Object.prototype.safeGet = function(key) { 
    return this? this[key] : false; 
} 
var nullObject = null; 
console.log(Object.safeGet.call(nullObject, 'invalid')); 

Hier ist der JSFiddle: http://jsfiddle.net/LBsY7/1/

+0

handy handy handy, danke –

+0

'Object.prototype.safeGet' stürzt botbuilder für mich ab .. komisch ... –

1

Ich würde vorschlagen,

if(typeof someObject != 'undefined') 
    var foo = someObject.myProperty 
else 
    return false; //or whatever 

Sie auch die Kontrolle über die property auch hinzufügen können, mit:

if(someObject.myProperty) 

deutlich innerhalb der ersten if

Or ('vielleicht' weniger korrekt)

if(someObject) 
    var foo = someObject.myProperty 

sollte das zweite Beispiel arbeiten, weil undefined als falsyvalue erkannt

1

Wenn es für Sie eine häufige Anforderung ist, können Sie eine Funktion erstellen, die es überprüft, wie

function getValueOfNull(obj, prop) { 
    return(obj == null ? undefined : obj[prop]); 
} 
Verwandte Themen