La diferenco inter nula kaj nedifinita en Ĝavoskripto

Referenco

JavaScript

Tipa uzado de nulo

Kiel funkcio-parametro, ĝi signifas, ke la funkcio-parametro ne estas objekto

            function myFn(obj) {
    if(null == obj) {
        // code
    }
}
        

Kiel la fino de la prototipa ĉeno de objektoj

            Object.getPrototypeOf(Object.prototype);
        

Liberigante la variablon, atribuu nulon al la variablo

            let o={
 code:'abc'
};
o = null;
        

Tipa uzado de nedifinita

La variablo estas deklarita sed ne atribuita, la valoro de la variablo estas nedifinita

            let o;
console.log(o);    //undefined
        

La parametro, kiun la funkcio devas provizi, ne estas donita dum vokado, tiam la valoro de la ne donita parametro estas nedifinita

            function myFn(o) {
    console.log(o);
}
myFn();   //undefined
        

Trajtoj, kiujn la objekto ne enhavas, la valoro estas nedifinita

            let o={
 code:'abc'
};
console.log(o.name);    //undefined
        

Kiam la funkcio ne redonas valoron, ĝi aperas nedifinita defaŭlte

            function myFn(obj) {
    obj = 'a';
}
console.log(myFn());    //undefined
        

Similecoj inter nula kaj nedifinita

Falsa kiam konvertita al bulea

            console.log(Boolean(null));  // false
console.log(Boolean(undefined)); // false
        

La diferenco inter nula kaj nedifinita

La rezulto estas malsama kiam konvertita al nombro. La rezulto de nula konvertiĝo estas valida nombra valoro de 0, kaj la rezulto de nedifinita konvertiĝo estas NaN.

            console.log(Number(null));  // 0
console.log(Number(undefined)); // NaN
        

La du specoj estas malsamaj, la tipo de nulo estas objekto, kaj la tipo de nedifinita estas nedifinita.

            console.log(typeof null); //object
console.log(typeof undefined); //undefined
        

komparu nula kaj nedifinita

Por distingi inter nula kaj nedifinita, nur kongrueco povas esti uzata. En kongrueco, ĝi strikte komparos ĉu la du tipoj estas egalaj.

            console.log(Boolean(null == undefined));  // true
console.log(Boolean(null === undefined)); // false
        

resumi

Post la supra komparo, ni klare komprenas ĉi tiujn du specojn. Kutime kiam ni juĝas ĉu variablo havas validan valoron skribante kodon, ni ne bezonas distingi inter ambaŭ, nur uzu ĝin kiel bulean tipon. Sed kiam ni devas juĝi ĉu la posedaĵo ekzistas, ni devas strikte uzi la tipon por juĝi nedifinita. Fine, se ni preterpasas nombran valoron, ni devas unue juĝi, kaj ne povas esti rekte ĵetitaj al cifereca tipo, alie nula kaŭzos nin akiri nenormalajn rezultojn, kaj nedifinita rekte kalkulos la malvalidan rezulton NaN.