Sono un po 'confuso su Javascript indefinito e nullo.
Non essere confuso null
. In genere ha senso e si comporta in modo simile ai concetti di altri linguaggi di scripting degli oggetti "null", "zero" o "Nessuno" fuori banda.
undefined
d'altra parte, è una strana stranezza JavaScript. È un oggetto singleton che rappresenta valori fuori banda, essenzialmente un secondo simile ma diverso null
. Viene fuori:
Quando si chiama una funzione con meno argomenti rispetto all'elenco degli argomenti negli function
elenchi di istruzioni, gli argomenti non superati vengono impostati su undefined
. Puoi provarlo con es .:
function dosomething(arg1, arg2) {
if (arg2===undefined)
arg2= DEFAULT_VALUE_FOR_ARG2;
...
}
Con questo metodo non puoi distinguere tra dosomething(1)
e dosomething(1, undefined)
; arg2
sarà lo stesso valore in entrambi. Se hai bisogno di dire la differenza che puoi guardare arguments.length
, ma fare argomenti opzionali del genere non è generalmente molto leggibile.
Quando una funzione non ha return value;
, ritorna undefined
. In genere non è necessario utilizzare un tale risultato di ritorno.
Quando dichiari una variabile con var a
un'istruzione in un blocco, ma non hai ancora assegnato un valore, lo è undefined
. Ancora una volta, non dovresti mai davvero fare affidamento su questo.
L' typeof
operatore spettrale ritorna 'undefined'
quando il suo operando è una variabile semplice che non esiste, invece di generare un errore come accadrebbe normalmente se si provasse a fare riferimento ad esso. (Puoi anche dargli una semplice variabile racchiusa tra parentesi, ma non un'espressione completa che coinvolge una variabile inesistente.) Neanche per questo è molto utile.
Questo è controverso. Quando accedi a una proprietà di un oggetto che non esiste, non ricevi immediatamente un errore come in ogni altra lingua. Invece ottieni un undefined
oggetto. (E poi quando proverai a usare undefined
quell'oggetto più avanti nello script andrà storto in un modo strano che è molto più difficile da rintracciare che se JavaScript avesse appena lanciato un errore immediatamente.)
Questo è spesso usato per verificare l'esistenza di proprietà:
if (o.prop!==undefined) // or often as truthiness test, if (o.prop)
...do something...
Tuttavia, poiché è possibile assegnare undefined
come qualsiasi altro valore:
o.prop= undefined;
che in realtà non rileva se la proprietà è affidabile lì. Meglio usare l' in
operatore, che non era nella versione originale di JavaScript di Netscape, ma è ora disponibile ovunque:
if ('prop' in o)
...
In sintesi, undefined
è un pasticcio specifico di JavaScript, che confonde tutti. A parte gli argomenti delle funzioni opzionali, in cui JS non ha altri meccanismi più eleganti, undefined
dovrebbe essere evitato. Non avrebbe mai dovuto far parte della lingua; null
avrebbe funzionato bene per (2) e (3), e (4) è un malfunzionamento che esiste solo perché all'inizio JavaScript non aveva eccezioni.
cosa fa if (!testvar)
veramente? Verifica se non definito e null o solo non definito?
Tale 'truthiness' controlli di prova contro false
, undefined
, null
, 0
, NaN
e le stringhe vuote. Ma in questo caso, sì, è davvero undefined
interessato. IMO, dovrebbe essere più esplicito al riguardo e dire if (testvar!==undefined)
.
una volta definita una variabile posso ripulirla in indefinita (quindi eliminando la variabile).
Puoi sicuramente assegnarglielo undefined
, ma questo non cancellerà la variabile. Solo l' delete object.property
operatore rimuove davvero le cose.
delete
è realmente pensato per le proprietà piuttosto che per le variabili in quanto tali. I browser ti permetteranno di cavartela direttamente delete variable
, ma non è una buona idea e non funzionerà in modalità rigorosa ECMAScript Quinta Edizione. Se si desidera liberare un riferimento a qualcosa in modo che possa essere raccolto in modo inutile, sarebbe più normale dirlo variable= null
.
posso passare indefinito come parametro?
Sì.