Razlika med null in undefined v JavaScript

Referenca

JavaScript

Tipič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.