2014-05-12 15 views
7

In javascript, spesso desidero accedere all'attributo di un oggetto che potrebbe non esistere.Accedere a una proprietà di un oggetto a volte nullo senza errori

Ad esempio:

var foo = someObject.myProperty

Tuttavia, questo genera un errore se someObject non è definito. Qual è il modo convenzionale per accedere alle proprietà di oggetti potenzialmente nulli e restituire semplicemente false o null se non esiste?

In Ruby, posso fare someObject.try(:myProperty). Esiste un equivalente JS?

+0

Per controllare se il suo tipo non è definito è un modo. – melancia

risposta

2

Io non credo che ci sia un equivalente diretto di ciò che stai chiedendo in JavaScript. Ma possiamo scrivere alcuni metodi utili che fanno la stessa cosa.

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

Ecco il JSFiddle: http://jsfiddle.net/LBsY7/1/

+0

pratico maneggevole a portata di mano, grazie –

+0

'Object.prototype.safeGet' arresta anomalo botbuilder per me .. strano ... –

1

Vorrei suggerire

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

è possibile aggiungere anche il controllo sul property anche, con:

if(someObject.myProperty) 

chiaramente all'interno del primo if

O ('forse' meno corretto)

if(someObject) 
    var foo = someObject.myProperty 

secondo esempio dovrebbe funzionare perché undefined è riconosciuto come un falsyvalue

1

Se si tratta di una richiesta frequente per voi, è possibile creare una funzione che controlla esso, come

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