Разница между 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.