2013-05-10 10 views
30

Quando si dichiarano le variabili nella parte superiore della funzione JavaScript, è consigliabile impostarle uguali a null o lasciare "non definite"? Un altro modo per chiedere, quali circostanze richiedono ciascuna opzione di seguito?Imposta la variabile JavaScript = null o lascia undefined?

Opzione A:

var a = null, 
    b = null; 

Opzione B:

var a, 
    b; 
+2

Vado con l'opzione 'b' –

+3

@ Mr.Alien - d'accordo. Non c'è motivo di usare la versione '= null' a meno che non importi che i valori delle variabili siano' null' invece di 'undefined'. –

+0

In realtà, 'var a, b;' potrebbe non sempre * lasciarlo 'indefinito' *. Nelle precedenti versioni di IE, avresti bisogno di cambiare quel pezzo di codice in 'var a = indefinito, b = indefinito;', altrimenti il ​​tuo codice genererebbe un errore mentre tentavi di accedervi (anche se stavi solo cercando di controllare se ha qualche valore con 'if (a && b)', per esempio). In tal caso, una variabile non impostata differisce da "non definito". – falsarella

risposta

13

li dichiaro indefinita quando non si assegna un valore perché sono indefiniti, dopo tutto.

+5

Quindi è necessario "assegnare" undefined, perché come hai detto sono del tutto indefiniti? – VivekDev

+1

Come accennato non è necessario dichiarare undefined, ma anche se si dichiara undefined allora quando si verifica quel valore non si saprà se lo si è impostato deliberatamente o se non è mai stato effettivamente impostato. Questo è il motivo per cui preferisco null nei casi in cui potrebbe non esserci un valore. –

0

La risposta breve è che non fa differenza a causa del modo in cui scorre attraverso lo stack. Tuttavia ci sono alcune situazioni in cui sarebbe meglio trattare variabili al di fuori dell'ambito.

+4

Mi dispiace, ma quella risposta non ha alcun senso. Non ha nulla a che fare con qualsiasi stack e niente a che fare con scope. Una versione imposta i valori delle variabili su 'null', e l'altro li imposta su' undefined'. Questa è la * sola * differenza; non c'è connessione con nessuna delle cose che hai menzionato. –

+0

@MichaelGeary sì ma sembra intelligente –

1

L'unica volta che è necessario impostarlo (o no) è se avete bisogno di controllare in modo esplicito che una variabile a è impostato esattamente al null o undefined.

if(a === null) { 

} 

... non è lo stesso di:

if(a === undefined) { 

} 

Detto questo, a == null && a == undefined tornerà true.

Fiddle

+0

Il controllo di null in questo caso non è buono. In quanto viola la best practice "evitare le comparse nulle" in javascript. Si dovrebbe confrontare con null solo per oggetto DOM (http://my.safaribooksonline.com/book/programming/javascript/9781449328092/iidot-programming-practices/id2779483) –

+0

Non sono d'accordo; tutto quello che vogliamo fare è vedere se una variabile è effettivamente 'null' o' undefined' - che sono controlli totalmente validi. Sono d'accordo_ che nel tuo esempio citato è una cattiva idea controllare su 'null', ma questo è solo un caso :) – jterry

30

Dipende dal contesto.

  • "undefined" indica che questo valore non esiste. typeof restituisce "undefined"

  • "null" indica che questo valore esiste con un valore vuoto. Quando si utilizza typeof per verificare "null", si vedrà che si tratta di un oggetto. Altro caso quando si serializza il valore "null" sul server backend come asp.net mvc, il server riceverà "null", ma quando si serializza "undefined", è improbabile che il server riceva un valore.

9

In genere, utilizzo null per valori che so possono avere uno stato "null"; per esempio

if(jane.isManager == false){ 
    jane.employees = null 
} 

Altrimenti, se una variabile o una funzione che non è ancora definita (e quindi, non è "utilizzabile" al momento), ma si suppone essere installato successivamente, di solito lasciato indefinito.

-12

È possibile utilizzare ''; a dichiarare variabile NULL in Javascript

+8

Una stringa vuota e' null' sono cose molto diverse. –

1

Generalmente parlano ho definito nullo indicare un impostare il valore e indefinito per indicare alcuna impostazione ha avuto luogo umano.

1

Di solito lo imposto su qualsiasi cosa mi aspetto di restituire dalla funzione.

Se una stringa, che imposterò su una stringa vuota = '', lo stesso per oggetto = {} e array = [], numeri interi = 0.

utilizzando questo metodo mi consente di verificare la presenza di null/undefined. la mia funzione saprà come gestire string/array/oggetto indipendentemente dal risultato.

Problemi correlati