Розніца паміж null і undefined у JavaScript
Даведка
JavaScriptТыповае выкарыстанне null
Як параметр функцыі гэта азначае, што параметр функцыі не з'яўляецца аб'ектам
function myFn(obj) {
if(null == obj) {
// code
}
}
Як канец ланцужка прататыпа аб'екта
Object.getPrototypeOf(Object.prototype);
Пры вызваленні зменнай прысвойвайце зменнай null
let o={
code:'abc'
};
o = null;
Тыповае выкарыстанне undefined
Зменная аб'яўляецца, але не прызначаецца, значэнне зменнай не вызначана
let o;
console.log(o); //undefined
Параметр, які павінна прадастаўляць функцыя, не прадастаўляецца пры выкліку, тады значэнне параметра, якое не прадастаўляецца, не вызначана
function myFn(o) {
console.log(o);
}
myFn(); //undefined
Уласцівасці, якіх аб'ект не ўтрымлівае, значэнне не вызначана
let o={
code:'abc'
};
console.log(o.name); //undefined
Калі функцыя не вяртае значэнне, яна па змаўчанні вяртаецца нявызначаным
function myFn(obj) {
obj = 'a';
}
console.log(myFn()); //undefined
Падабенства паміж нулявым і нявызначаным
Ілжыва пры пераўтварэнні ў лагічную
console.log(Boolean(null)); // false
console.log(Boolean(undefined)); // false
Розніца паміж null і undefined
Вынік адрозніваецца пры пераўтварэнні ў лік. Вынікам нулявога пераўтварэння з'яўляецца сапраўднае значэнне ліку 0, а вынікам нявызначанага пераўтварэння з'яўляецца NaN.
console.log(Number(null)); // 0
console.log(Number(undefined)); // NaN
Два тыпы розныя, тып null - аб'ект, а тып undefined - нявызначаны.
console.log(typeof null); //object
console.log(typeof undefined); //undefined
параўнайце null і undefined
Каб адрозніць нулявы і нявызначаны, можна выкарыстоўваць толькі адпаведнасць. У адпаведнасці будзе строга параўноўвацца, ці роўныя два тыпы.
console.log(Boolean(null == undefined)); // true
console.log(Boolean(null === undefined)); // false
падсумоўваць
Пасля вышэйпрыведзенага параўнання мы маем дакладнае разуменне гэтых двух тыпаў. Звычайна, калі мы мяркуем, ці мае пераменная сапраўднае значэнне пры напісанні кода, нам не трэба адрозніваць гэтыя два, проста выкарыстоўваем яе як лагічны тып. Але калі нам трэба меркаваць, ці існуе маёмасць, мы павінны строга карыстацца тыпам для ацэнкі нявызначаных. Нарэшце, калі мы перадаем лікавае значэнне, мы павінны спачатку прыняць рашэнне і не можа быць непасрэдна прывязаны да лікавага тыпу, інакш null прывядзе да ненармальных вынікаў, а undefined - непасрэдна вылічыць недапушчальны вынік NaN.