Різниця між null та undefined у JavaScript
Довідково
JavaScriptТипове використання null
Як параметр функції це означає, що параметр функції не є об’єктом
function myFn(obj) {
if(null == obj) {
// code
}
}
Як кінець ланцюжка прототипу об’єкта
Object.getPrototypeOf(Object.prototype);
Випускаючи змінну, присвоюйте змінній значення null
let o={
code:'abc'
};
o = null;
Типове використання невизначеного
Змінна оголошена, але не призначена, значення змінної не визначено
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
Різниця між нульовим та невизначеним
Результат відрізняється при перетворенні в число. Результатом нульового перетворення є дійсне значення числа 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.