La differenza tra null e undefined in JavaScript
Riferimento
JavaScriptUtilizzo tipico di null
Come parametro di funzione, significa che il parametro di funzione non è un oggetto
function myFn(obj) {
if(null == obj) {
// code
}
}
Come la fine della catena del prototipo dell'oggetto
Object.getPrototypeOf(Object.prototype);
Quando si rilascia la variabile, assegnare null alla variabile
let o={
code:'abc'
};
o = null;
Utilizzo tipico di undefined
La variabile è dichiarata ma non assegnata, il valore della variabile è indefinito
let o;
console.log(o); //undefined
Il parametro che la funzione deve fornire non viene fornito durante la chiamata, quindi il valore del parametro che non viene fornito non è definito
function myFn(o) {
console.log(o);
}
myFn(); //undefined
Proprietà che l'oggetto non contiene, il valore non è definito
let o={
code:'abc'
};
console.log(o.name); //undefined
Quando la funzione non restituisce un valore, restituisce undefined per impostazione predefinita
function myFn(obj) {
obj = 'a';
}
console.log(myFn()); //undefined
Somiglianze tra null e undefined
Falso quando convertito in booleano
console.log(Boolean(null)); // false
console.log(Boolean(undefined)); // false
La differenza tra null e undefined
Il risultato è diverso quando viene convertito in un numero. Il risultato della conversione nullo è un valore numerico valido pari a 0 e il risultato della conversione non definita è NaN.
console.log(Number(null)); // 0
console.log(Number(undefined)); // NaN
I due tipi sono diversi, il tipo di null è object e il tipo di undefined è undefined.
console.log(typeof null); //object
console.log(typeof undefined); //undefined
confronta null e undefined
Per distinguere tra null e undefined, è possibile utilizzare solo la congruenza, che in congruenza confronta rigorosamente se i due tipi sono uguali.
console.log(Boolean(null == undefined)); // true
console.log(Boolean(null === undefined)); // false
per riassumere
Dopo il confronto di cui sopra, abbiamo una chiara comprensione di questi due tipi. Di solito quando giudichiamo se una variabile ha un valore valido durante la scrittura del codice, non abbiamo bisogno di distinguere tra i due, basta usarla come tipo booleano. Ma quando dobbiamo giudicare se la proprietà esiste, dobbiamo usare rigorosamente il tipo per giudicare indefinito. Infine, se passiamo un valore numerico, dobbiamo prima esprimere un giudizio e non possiamo essere convertiti direttamente in un tipo numerico, altrimenti null ci farà ottenere risultati anormali e undefined calcolerà direttamente il risultato non valido NaN.