La diferenco inter nula kaj nedifinita en Ĝavoskripto
Referenco
JavaScriptTipa 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.