Skirtumas tarp „null“ ir neapibrėžto „JavaScript“
Nuoroda
JavaScriptTipiš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.