Razlika između null i undefined u JavaScript-u
Referenca
JavaScriptTipična upotreba null
Kao parametar funkcije, 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
Laž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 su vrste različite, vrsta null je objekt, a vrsta undefined je nedefinirana.
console.log(typeof null); //object
console.log(typeof undefined); //undefined
usporedi null i undefined
Da bi se razlikovala nula i nedefinirana, može se koristiti samo podudarnost. U podudarnosti će se strogo uspoređivati jesu li dvije vrste jednake.
console.log(Boolean(null == undefined)); // true
console.log(Boolean(null === undefined)); // false
da sumiramo
Nakon gornje usporedbe jasno razumijemo ove dvije vrste. Obično kada procjenjujemo ima li varijabla valjanu vrijednost prilikom pisanja koda, ne trebamo razlikovati to dvoje, samo je koristimo kao logički tip. Ali kada trebamo prosuditi postoji li imovina, moramo strogo koristiti vrstu za prosuđivanje nedefiniranih. Napokon, ako prenesemo 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 abnormalnih rezultata, a undefined će izravno izračunati nevažeći rezultat NaN.