2014-05-12 13 views
7

W javascript często chcę uzyskać dostęp do atrybutu obiektu, który może nie istnieć.Uzyskiwanie dostępu do właściwości obiektu o niekiedy pustej wartości bez błędu

Na przykład:

var foo = someObject.myProperty

Jednak będzie to wyrzucić błąd, jeśli someObject nie jest zdefiniowana. Jaki jest konwencjonalny sposób uzyskiwania dostępu do właściwości potencjalnie zerowych obiektów i po prostu zwracamy wartość false lub null, jeśli nie istnieje?

W języku Ruby mogę wykonać someObject.try(:myProperty). Czy istnieje odpowiednik JS?

+0

Aby sprawdzić, czy jego typ jest niezdefiniowana to sposób. – melancia

Odpowiedz

2

Nie sądzę, nie ma bezpośredni odpowiednik tego, o co pytasz w JavaScript. Ale możemy napisać kilka metod, które robią to samo.

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

Oto JSFiddle: http://jsfiddle.net/LBsY7/1/

+0

poręczne poręczne, dzięki –

+0

'Object.prototype.safeGet' zawiesza się dla mnie botbuilder .. dziwne ... –

1

Proponuję

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

Można również dodać kontrolę nad property też z:

if(someObject.myProperty) 

wyraźnie wewnątrz pierwszej if

lub ('być może' mniej poprawne)

if(someObject) 
    var foo = someObject.myProperty 

drugi przykład powinien działać, ponieważ undefined jest rozpoznawany jako falsyvalue

1

Jeśli jest to częste żądanie dla Ciebie, można utworzyć funkcję, która sprawdza je, jak

function getValueOfNull(obj, prop) { 
    return(obj == null ? undefined : obj[prop]); 
} 
Powiązane problemy