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.
undefinedd'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 functionelenchi 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); arg2sarà 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 aun'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' typeofoperatore 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 undefinedoggetto. (E poi quando proverai a usare undefinedquell'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 undefinedcome qualsiasi altro valore:
o.prop= undefined;
che in realtà non rileva se la proprietà è affidabile lì. Meglio usare l' inoperatore, 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, undefineddovrebbe essere evitato. Non avrebbe mai dovuto far parte della lingua; nullavrebbe 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, NaNe le stringhe vuote. Ma in questo caso, sì, è davvero undefinedinteressato. 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.propertyoperatore 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ì.