Razlika između null i undefined u JavaScript-u
Referenca
JavaScriptUobičajena upotreba null
Kao parametar funkcije, to znači da parametar funkcije nije objekt
function myFn(obj) {
if(null == obj) {
// code
}
}
Kao kraj lanca prototipa objekta
Object.getPrototypeOf(Object.prototype);
Kada otpuštate varijablu, varijabli dodijelite null
let o={
code:'abc'
};
o = null;
Uobičajena upotreba nedefiniranog
Varijabla je deklarirana, ali nije dodijeljena, vrijednost varijable je nedefinirana
let o;
console.log(o); //undefined
Parametar koji funkcija treba pružiti nije osiguran pri pozivu, tada je vrijednost parametra koji nije osiguran nedefinirana
function myFn(o) {
console.log(o);
}
myFn(); //undefined
Svojstva koja objekt ne sadrži, vrijednost je nedefinirana
let o={
code:'abc'
};
console.log(o.name); //undefined
Kad funkcija ne vrati vrijednost, vraća se prema zadanim postavkama nedefinirano
function myFn(obj) {
obj = 'a';
}
console.log(myFn()); //undefined
Sličnosti između null i undefined
Netačno kada se pretvori u logičku vrijednost
console.log(Boolean(null)); // false
console.log(Boolean(undefined)); // false
Razlika između null i undefined
Rezultat je drugačiji kada se pretvori u broj. Rezultat null pretvorbe je valjana vrijednost broja 0, a rezultat nedefinirane pretvorbe je NaN.
console.log(Number(null)); // 0
console.log(Number(undefined)); // NaN
Dvije vrste su različite, tip null je objekt, a tip undefined je nedefiniran.
console.log(typeof null); //object
console.log(typeof undefined); //undefined
uporedi null i undefined
Za razlikovanje nule od nedefinirane može se koristiti samo podudarnost, koja će strogo usporediti jesu li dvije vrste jednake.
console.log(Boolean(null == undefined)); // true
console.log(Boolean(null === undefined)); // false
da sumiram
Nakon gornje usporedbe, imamo jasno razumijevanje ove dvije vrste. Obično kada procjenjujemo ima li varijabla valjanu vrijednost prilikom pisanja koda, ne trebamo praviti razliku između njih, već je koristimo kao logički tip. Ali kada trebamo prosuditi postoji li imovina, moramo strogo koristiti tip za suđenje prema nedefiniranim. Konačno, ako proslijedimo numeričku vrijednost, prvo moramo donijeti prosudbu i ne možemo je izravno prebaciti na numerički tip, jer će u suprotnom null dovesti do nenormalnih rezultata, a undefined će direktno izračunati nevažeći rezultat NaN.