Skirtumas tarp „null“ ir neapibrėžto „JavaScript“

Nuoroda

JavaScript

Tipiškas „null“ vartojimas

Kaip funkcijos parametras reiškia, kad funkcijos parametras nėra objektas

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

Kaip objekto prototipo grandinės pabaiga

            Object.getPrototypeOf(Object.prototype);
        

Atleisdami kintamąjį, priskirkite kintamajam nulį

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

Tipinis neapibrėžto naudojimas

Kintamasis yra deklaruojamas, bet nepriskiriamas, jo reikšmė nėra apibrėžta

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

Parametras, kurį turėtų pateikti funkcija, skambinant nepateikiamas, tada nenurodoma parametro vertė

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

Ypatybės, kurių objekte nėra, vertė nėra apibrėžta

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

Kai funkcija negrąžina vertės, ji pagal numatytuosius nustatymus grįžta neapibrėžta

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

Nulinio ir neapibrėžto panašumai

Klaidinga, kai paverčiama logine

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

Skirtumas tarp nulinio ir neapibrėžto

Konvertuojant į skaičių, rezultatas yra kitoks. Nulinės konversijos rezultatas yra galiojanti skaičiaus reikšmė 0, o neapibrėžtos konversijos rezultatas yra NaN.

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

Šie du tipai yra skirtingi, nulio tipas yra objektas, o neapibrėžto tipas nėra apibrėžtas.

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

palyginkite nulį ir neapibrėžtą

Norint atskirti nulį nuo neapibrėžto, galima naudoti tik sutapimą. Suderinant jis griežtai palygins, ar abu tipai yra lygūs.

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

apibendrinti

Po aukščiau pateikto palyginimo mes aiškiai suprantame šiuos du tipus. Paprastai, kai rašydami kodą sprendžiame, ar kintamasis turi galiojančią reikšmę, mums nereikia atskirti šių dviejų, tiesiog naudokite jį kaip Būlio tipą. Bet kai turime spręsti, ar nuosavybė egzistuoja, turime griežtai naudoti tipą, kad galėtume vertinti neapibrėžtą. Galiausiai, jei perduodame skaitinę vertę, pirmiausia turime priimti sprendimą ir negalime būti tiesiogiai priskirti skaitmeniniam tipui, nes kitaip nulinis rezultatas bus nenormalus, o neapibrėžtas tiesiogiai apskaičiuos neteisingą rezultatą NaN.