Javascript è un linguaggio molto completo, talmente completo da presentare alcuni costrutti sintattici apparentemente simili ma concettualmente anche notevolmente diversi; in questo post verranno analizzate le differenze esistenti tra undefined
e null
, due entità che se non interpretate in modo univoco potrebbero essere utilizzate in sostituzione l’una dell’altra, generando così eccezioni e comportamenti inattesi.
A tal proposito è possibile sottolineare innanzitutto che:
undefined
viene impiegato per rappresentare il fatto che una variabile non è stata dichiarata; quest’ultima, inoltre, potrebbe essere stata dichiarata ma non ancora assegnata ad un valore specifico;null
è invece un’assegnazione di valore che significa "nessun valore".
Dal punto di vista delle modalità secondo le quali Javascript lavora con tali entità si può sostenere che il linguaggio imposta le variabili non assegnate associando loro un valore predefinito (default value) per undefined
, un valore invece non verrà mai impostato da JavaScript su null
, dovrà essere quindi lo sviluppatore a stabilire che una variabile non dovrà avere un valore.
Il fatto che tra i due costrutti esistano delle differenze definite nativamente in JavaScript può essere dimostrato grazie all’impiego degli operatori; si ipotizzi per esempio di sottoporre una variabile ad un controllo di identità:
if (typeof tmp === "undefined") {
alert('variabile undefined');
}
elseif (tmp === null) {
alert('variabile null');
}
In questo modo sapremo se una variabile è undefined
o null
.
Importante osservare che l’operatore di uguaglianza ("==
") considera undefined
e null
uguali, restituendo TRUE
, mentre lo stesso non accadrà utilizzando il già citato operatore di identità ("===
") che invece restituirà FALSE
.
Si ricordi inoltre che entrambi sono dei costrutti primitivi falsi dal punto di vista booleano, tale caratteristica però non li rende intercambiabili.