Разница между 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
Когда функция не возвращает значение, по умолчанию она возвращает undefined.
function myFn(obj) {
obj = 'a';
}
console.log(myFn()); //undefined
Сходства между null и undefined
Ложь при преобразовании в логическое значение
console.log(Boolean(null)); // false
console.log(Boolean(undefined)); // false
Разница между null и undefined
Результат будет другим при преобразовании в число. Результатом преобразования NULL является допустимое числовое значение 0, а результатом преобразования undefined является NaN.
console.log(Number(null)); // 0
console.log(Number(undefined)); // NaN
Эти два типа различны: тип null - объект, а тип undefined - undefined.
console.log(typeof null); //object
console.log(typeof undefined); //undefined
сравнить null и undefined
Чтобы различать null и undefined, можно использовать только сравнение, которое будет строго сравнивать, равны ли два типа.
console.log(Boolean(null == undefined)); // true
console.log(Boolean(null === undefined)); // false
подводить итоги
После приведенного выше сравнения у нас есть четкое представление об этих двух типах. Обычно, когда мы оцениваем, имеет ли переменная допустимое значение при написании кода, нам не нужно различать их, просто используйте ее как логический тип. Но когда нам нужно судить, существует ли свойство, мы должны строго использовать тип для определения неопределенности. Наконец, если мы передаем числовое значение, мы должны сначала сделать суждение, и его нельзя напрямую привести к числовому типу, иначе null приведет к получению ненормальных результатов, а undefined будет напрямую вычислять недопустимый результат NaN.