Mi sono imbattuto nel seguente codice:
function test(data) {
if (data != null && data !== undefined) {
// some code here
}
}
Sono un po 'nuovo di JavaScript, ma, da altre domande che ho letto qui, ho l'impressione che questo codice non abbia molto senso.
Riceverai un errore se accedi a una variabile non definita in qualsiasi contesto diverso datypeof
.
Aggiornamento: la (citazione della) risposta sopra potrebbe essere fuorviante. Dovrebbe dire «una variabile non dichiarata» , invece di «una variabile non definita» .
Come ho scoperto, nelle risposte di Ryan ♦ , maerics e nwellnhof , anche quando non viene fornito alcun argomento a una funzione, le sue variabili per gli argomenti vengono sempre dichiarate. Questo fatto dimostra inoltre che il primo elemento nell'elenco seguente è errato.
Da quanto ho capito, si possono verificare i seguenti scenari:
La funzione è stata chiamata senza argomenti, creando cosìdata
una variabile non definita e generando un erroredata != null
.La funzione è stata chiamata specificamente con
null
(oundefined
), come argomento, nel qual casodata != null
protegge già il codice interno, rendendolo&& data !== undefined
inutile.La funzione è stata chiamata con un argomento non nullo, nel qual caso passerà banalmente sia
data != null
edata !== undefined
.
D: La mia comprensione è corretta?
Ho provato quanto segue, nella console di Firefox:
--
[15:31:31.057] false != null
[15:31:31.061] true
--
[15:31:37.985] false !== undefined
[15:31:37.989] true
--
[15:32:59.934] null != null
[15:32:59.937] false
--
[15:33:05.221] undefined != null
[15:33:05.225] false
--
[15:35:12.231] "" != null
[15:35:12.235] true
--
[15:35:19.214] "" !== undefined
[15:35:19.218] true
Non riesco a capire un caso in cui il data !== undefined
dopo data != null
potrebbe essere di qualche utilità.
if(data)
significherebbe che non può passare false
o 0
come valori per data
.
if(typeof someUndefVar == whatever) -- works
e if(someUnderVar) -- error
.
data !== null && data !== undefined
, che è equivalente a data != null
cui è equivalente data != undefined
. La prima forma tende a essere favorita in quanto è più esplicita riguardo alle condizioni, mentre sarebbe facile trascurarle entrambe null
e undefined
vengono verificate con le due condizioni successive.
undefined
IMO sono un odore di codice. Non è una parola chiave protetta come null
, è una variabile che sembra essere indefinita. Questo è completamente valido e sta per violare il codice:undefined = 1
if (data)
. È un modo mnemonico Javascript per verificare se ladata
variabile viene valutata come vera.undefined
,null
, False, 0, stringa vuota, array vuoto e oggetto (?) Senza proprietà restituisce false, il resto è vero.