JavaScript ha 2 tipi di tipi: primitive (stringhe, booleani, numeri, simboli) e oggetti.
Gli oggetti sono strutture dati complesse. L’oggetto più semplice in JavaScript è l’oggetto semplice – una raccolta di chiavi e valori associati:
let myObject = { name: 'Eric Cartman'};
Ma ci sono situazioni in cui un oggetto non può essere creato. Per tali casi, JavaScript fornisce un valore speciale null
— che indica un oggetto mancante.,
let myObject = null;
In questo post, potrete imparare tutto su null
in JavaScript: il suo significato, come rileva la differenza tra null
e undefined
e perché l’uso null
ampiamente crea manutenzione del codice di difficoltà.
1. Il concetto di null
La specifica JavaScript dice sunull
:
null
è un valore primitivo che rappresenta l’assenza intenzionale di qualsiasi valore oggetto.,
Se vedinull
(assegnato a una variabile o restituito da una funzione), allora in quel punto avrebbe dovuto essere un oggetto, ma per qualche motivo, un oggetto non è stato creato.
Per esempio, la funzione greetObject()
crea oggetti, ma può anche tornare null
quando un oggetto non può essere creato:
Tuttavia, quando si richiama la funzione senza argomenti — greetObject()
la funzione restituisce null
., Restituire null
è ragionevole perché il parametrowho
non ha valore e l’oggetto di saluto non può essere creato.
1.1 Analogia del mondo reale di null
Pensando a un’analogia del mondo reale, puoi immaginare una variabile come una scatola. Proprio come una variabile può contenere un oggetto, la scatola può contenere oggetti come una teiera.
Ma una volta che ricevi una scatola e la apri… e niente lì! Qualcuno ha fatto un errore e ti ha mandato una scatola vuota. La casella non contiene nulla o, dicendo diversamente, contiene un valorenull
.
2., Come verificare la presenza di null
buon modo per controllare null
è utilizzando l’operatore di uguaglianza rigorosa:
const missingObject = null;const existingObject = { message: 'Hello!' };missingObject === null; // => trueexistingObject === null; // => false
missingObject === null
valuta true
perché missingObject
variabile contiene un null
valore.
Se la variabile contiene un valore non nullo, come un oggetto, l’espressioneexistingObject === null
valutafalse
.
2.,1 null is falsy
null
, alongside false
, 0
, ''
, undefined
, NaN
, is a falsy value. If a falsy value is encountered in conditionals, then JavaScript coerces falsy to false
.
Boolean(null); // => falseif (null) { console.log('null is truthy');} else { console.log('null is falsy'); // logs 'null is falsy'}
2.2 typeof null
Interestingly, to what value type null
evaluates to?,
typeof null; // => 'object'
Hm how come potrebbe il tipo di oggetto mancante valutare'object'
? Risulta chetypoef null
essendo'object'
è stato un errore nella prima implementazione JavaScript.
Non utilizzare l’operatore typeof
per rilevare un valore null
. Come accennato in precedenza, utilizzare l’operatore di uguaglianza rigorosa myVar === null
.,
Se si desidera verificare se una variabile contiene un oggetto utilizzando l’operatoretypeof
, è necessario controllare anchenull
:
3. La trappola di null
null
potrebbe apparire, spesso inaspettatamente, in situazioni in cui ci si aspetta un oggetto. Quindi se si tenta di estrarre una proprietà da null
, JavaScript genera un errore.,
usiamo di nuovo greetObject()
funzione e si tenta di accedere message
proprietà dell’oggetto restituito:
let who = '';greetObject(who).message; // throws "TypeError: greetObject() is null"
Perché who
variabile è una stringa vuota, la funzione restituisce null
. Quando si accede alla proprietàmessage
danull
, viene generato un errore TypeError.,
È possibile gestirenull
utilizzando il concatenamento opzionale con coalescenza nullish:
let who = '';greetObject(who)?.message ?? 'Hello, Stranger!'; // => 'Hello, Stranger!'
o utilizzare 2 alternative descritte nella sezione successiva.
4. Alternative a null
Si è tentati di restituire null
quando non è possibile costruire un oggetto. Ma questa pratica ha aspetti negativi.
Non appena null
appare all’interno del tuo stack di esecuzione, devi sempre controllarlo.,
io cerco di evitare di tornare null
a favore di:
- la restituzione di un oggetto predefinito invece di
null
- generazione di un errore, invece di restituire
null
ricordiamo che il greetObject()
funzione che restituisce il saluto oggetti.
Invece di restituirenull
quando manca l’argomento, è possibile restituire un oggetto predefinito:
o generare un errore:
Queste pratiche consentono di evitare di trattare connull
.
5., null vs undefined
undefined
è il valore di una variabile non inizializzata o di una proprietà oggetto.
Per esempio, se si dichiara una variabile senza assegnare un valore iniziale, l’accesso a tale variabile restituisce undefined
:
let myVariable;myVariable; // => undefined
La differenza principale tra i due tag null
e undefined
che null
rappresenta un oggetto mancante, mentre undefined
rappresenta uno stato non inizializzato.,
The strict equality operator ===
distinguishes null
from undefined
:
null === undefined; // => false
While loose equality operator ==
considers null
and undefined
equal:
null == undefined; // => true
I use the loose equality operator to check whether a variable is null
or undefined
:
6., Riepilogo
null
è un valore speciale in JavaScript che rappresenta un oggetto mancante.
L’operatore di uguaglianza rigorosa determina se una variabile è null: variable === null
.
typoef
l’operatore è utile per determinare il tipo di variabile (numero, stringa, booleano). Tuttavia, typeof
è fuorviante nel caso di null
: typeof null
valuta 'object'
.,
null
e undefined
sono in qualche modo equivalente, ancora, null
rappresenta un oggetto mancante, mentre undefined
stato non inizializzato.
Evitare se possibile di restituire null
o impostare le variabili su null
. Questa pratica porta alla diffusione di valori null e verifiche per null
. Invece, provare a utilizzare oggetti con proprietà predefinite, o anche lanciare errori.
Avendo padroneggiatonull
, perché non padroneggiareundefined
?, Segui il mio post 7 Suggerimenti per gestire undefined in JavaScript.
Quale condizione si usa per verificarenull
?