Penso che il modo più efficace per verificare "il valore è null
o undefined
" è
if (some_variable == null){
// some_variable is either null or undefined
}
Così queste due linee sono equivalenti:
if (typeof(some_variable) !== "undefined" && some_variable !== null) {}
if (some_variable != null) {}
Nota 1
Come indicato nella domanda, la breve variante richiede che some_variable
è stata dichiarata, altrimenti un ReferenceError saranno gettati. Tuttavia, in molti casi d'uso si può supporre che questo è sicuro:
controllo per gli argomenti opzionali:
function(foo){
if(foo == null) {...}
di controllo per le proprietà su un oggetto esistente
if(my_obj.foo == null) {...}
D'altra parte typeof
può trattare con variabili globali non dichiarate (restituisce semplicemente undefined
). Tuttavia questi casi dovrebbero essere ridotti al minimo per buone ragioni, come spiegato da Alsciende.
Nota 2
Questo - ancora più breve - variante è non equivalente:
if (!some_variable) {
// some_variable is either null, undefined, 0, NaN, false, or an empty string
}
così
if (some_variable) {
// we don't get here if some_variable is null, undefined, 0, NaN, false, or ""
}
Nota 3
In generale si consiglia di utilizzare ===
anziché ==
. La soluzione proposta è un'eccezione a questa regola. Il JSHint syntax checker fornisce anche l'opzione eqnull
per questo motivo.
Dal jQuery style guide:
Strict equality checks (===) should be used in favor of ==. The only exception is when checking for undefined and null by way of null.
// Check for both undefined and null values, for some important reason.
undefOrNull == null;
'if (some_variable) {...}' non sarà eseguito se 'some_variable' è' false' o '0' o ... – kennytm
buon punto;) Ma diciamo che io so non può essere falso o 0 e voglio solo verificare se posso usarlo in qualche logica (come una stringa, array, ecc.) –
Correlati: http://stackoverflow.com/questions/27509/detecting-an -undefined-object-property-in-javascript –