In JavaScript, ci sono due valori che sostanzialmente dicono "Non esisto" - undefinede null.
Una proprietà a cui un programmatore non ha assegnato nulla sarà undefined, ma affinché una proprietà lo diventi null, nulldeve essere assegnata esplicitamente ad essa.
Una volta ho pensato che fosse necessario nullperché undefinedè un valore primitivo e nullun oggetto. Non lo è, anche se typeof nullprodurrà 'object': in realtà, entrambi sono valori primitivi, il che significa che né undefinedné nullpossono 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 falsein contesti booleani. L'unica vera differenza a cui riesco a pensare è che uno valuta a NaN, l'altro a 0in contesti numerici.
Allora perché ci sono entrambi undefinede nullse questo confonde solo i programmatori che stanno controllando in modo errato nullquando cercano di scoprire se una proprietà è stata impostata o meno?
Quello che vorrei sapere è se qualcuno ha un esempio ragionevole in cui è necessario usare nullche non potrebbe essere espresso usando undefinedinvece.
Quindi il consenso generale sembra essere che undefinedsignifica "non esiste tale proprietà" mentre nullsignifica "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' inoperatore o hasOwnProperty()comunque. Quindi ancora una volta: qual è l'uso pratico di valori separati per undefinede null?
In realtà lo uso undefinedquando voglio annullare l'impostazione dei valori delle proprietà non più in uso ma che non voglio delete. Dovrei usare nullinvece?
In JavaScript, there are two values which basically say 'I don't exist' - undefined and null.No, undefineddice solo quello.
undefined.