Розніца паміж 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.