Razlika med null in undefined v JavaScript
Referenca
JavaScriptTipična uporaba null
Kot funkcijski parameter pomeni, da funkcijski parameter ni objekt
function myFn(obj) {
if(null == obj) {
// code
}
}
Kot konec verige objektnega prototipa
Object.getPrototypeOf(Object.prototype);
Ko sprostite spremenljivko, spremenljivki dodelite null
let o={
code:'abc'
};
o = null;
Tipična uporaba nedefinirane
Spremenljivka je deklarirana, vendar ni dodeljena, vrednost spremenljivke je nedoločena
let o;
console.log(o); //undefined
Parameter, ki ga mora zagotoviti funkcija, med klicem ni na voljo, vrednost parametra, ki ni na voljo, je nedoločena
function myFn(o) {
console.log(o);
}
myFn(); //undefined
Lastnosti, ki jih objekt ne vsebuje, je vrednost nedoločena
let o={
code:'abc'
};
console.log(o.name); //undefined
Ko funkcija ne vrne vrednosti, privzeto vrne nedefinirano
function myFn(obj) {
obj = 'a';
}
console.log(myFn()); //undefined
Podobnosti med nič in nedefinirano
False, če se pretvori v logično vrednost
console.log(Boolean(null)); // false
console.log(Boolean(undefined)); // false
Razlika med null in undefined
Rezultat je drugačen, če se pretvori v število. Rezultat pretvorbe ničelne vrednosti je veljavna številčna vrednost 0, rezultat nedoločene pretvorbe pa NaN.
console.log(Number(null)); // 0
console.log(Number(undefined)); // NaN
Ti dve vrsti sta različni, vrsta null je objekt in vrsta undefined je nedefinirana.
console.log(typeof null); //object
console.log(typeof undefined); //undefined
primerjaj nično in nedefinirano
Za razlikovanje med ničelno in nedefinirano je mogoče uporabiti samo skladnost, ki bo natančno primerjala, ali sta ti dve vrsti enaki.
console.log(Boolean(null == undefined)); // true
console.log(Boolean(null === undefined)); // false
da povzamem
Po zgornji primerjavi smo jasno razumeli ti dve vrsti. Običajno, ko presodimo, ali ima spremenljivka veljavno vrednost pri pisanju kode, ni treba razlikovati med njima, temveč jo uporabimo kot logično vrsto. Ko pa moramo presoditi, ali nepremičnina obstaja, moramo strogo uporabiti vrsto, da presodimo nedefinirano. Nazadnje, če prenesemo številsko vrednost, moramo najprej presoditi in je ni mogoče neposredno oddati številski vrsti, sicer bo null povzročil nenormalne rezultate, undefined pa bo neposredno izračunal neveljaven rezultat NaN.