In JavaScript, ci sono due valori che sostanzialmente dicono "Non esisto" - undefined
e null
.
Una proprietà a cui un programmatore non ha assegnato nulla sarà undefined
, ma affinché una proprietà lo diventi null
, null
deve essere assegnata esplicitamente ad essa.
Una volta ho pensato che fosse necessario null
perché undefined
è un valore primitivo e null
un oggetto. Non lo è, anche se typeof null
produrrà 'object'
: in realtà, entrambi sono valori primitivi, il che significa che né undefined
né null
possono essere restituiti da una funzione di costruzione, poiché entrambi verranno convertiti in un oggetto vuoto (si deve lanciare un errore per proclamare il fallimento nei costruttori).
Entrambi valutano anche false
in contesti booleani. L'unica vera differenza a cui riesco a pensare è che uno valuta a NaN
, l'altro a 0
in contesti numerici.
Allora perché ci sono entrambi undefined
e null
se questo confonde solo i programmatori che stanno controllando in modo errato null
quando cercano di scoprire se una proprietà è stata impostata o meno?
Quello che vorrei sapere è se qualcuno ha un esempio ragionevole in cui è necessario usare null
che non potrebbe essere espresso usando undefined
invece.
Quindi il consenso generale sembra essere che undefined
significa "non esiste tale proprietà" mentre null
significa "la proprietà esiste, ma non ha valore".
Potrei conviverci se le implementazioni JavaScript impongono effettivamente questo comportamento, ma undefined
è un valore primitivo perfettamente valido, quindi può essere facilmente assegnato alle proprietà esistenti per rompere questo contratto. Pertanto, se vuoi assicurarti che una proprietà esista, devi usare l' in
operatore o hasOwnProperty()
comunque. Quindi ancora una volta: qual è l'uso pratico di valori separati per undefined
e null
?
In realtà lo uso undefined
quando voglio annullare l'impostazione dei valori delle proprietà non più in uso ma che non voglio delete
. Dovrei usare null
invece?
In JavaScript, there are two values which basically say 'I don't exist' - undefined and null.
No, undefined
dice solo quello.
undefined
.