Начнём с того что такое null
null- это пустое или несуществующее значениеnullдолжен быть присвоен
let foo = null;
console.log(foo); // nullА теперь поговорим об undefined
undefined чаще всего означает, что переменная была объявлена, но не определена.
let foo;
console.log(foo); // undefinedТакже при поиске несуществующих ключей в объекте мы также получим undefined:
const foo = {};
console.log(foo.bar); // undefinedОбщее у null и undefined
В JavaScript всего шесть ложных значений. null и undefined - относятся к ложным.
Вот полный список:
false0(ноль)“”(пустая строка)nullundefinedNaN(Not A Number)
Любое другое значение в JavaScript считается истинным.
Также в JavaScript есть семь примитивных значений. null и undefined являются примитивными значениями.
Вот полный список:
BooleanNullUndefinedNumberStringSymbolBigInt
Все остальные значения в JavaScript являются объектами (объектами, функциями, массивами и т.д.).
Практические отличия null и undefined
- При использовании
typeofдля проверкиnullон возвращает объект,undefinedже возвращаетundefined:
let foo = null;
console.log(typeof foo); // object
let bar;
console.log(typeof bar); // undefinedТо, что typeof null является объектом это произошло с самого начала JavaScript
и это считается ошибкой в исходной реализации JavaScript.
- В функции с параметрами по умолчанию
undefinedбудет использовать значение по умолчанию, аnull- нет:
function sayHi (name = 'Joe') {
console.log(`Hi, ${name}`);
}
sayHi(); // Hi, Joe
sayHi('Doe'); // Hi, Doe
sayHi(undefined); // Hi, Joe
sayHi(null); // Hi, nullТоже самое касается и объектов при установке значений по умолчании в момент деструктуризации:
const { foo = 1 } = { foo: undefined }
const { bar = 1 } = { bar: null }
console.log(foo) // 1
console.log(bar) // nullJSONможет обрабатывать толькоnull, но неundefined:
const foo = JSON.stringify(null) // "null"
JSON.parse(foo) // null
JSON.parse(null) // null
const bar = JSON.stringify(undefined) // undefined
JSON.parse(bar) // Uncaught SyntaxError: Unexpected token u in JSON at position 0
JSON.parse(undefined) // Uncaught SyntaxError: Unexpected token u in JSON at position 0Подведём итоги:
null- это присвоенное значение. Оно означает пустое значение.undefinedозначает, что переменная была объявлена, но еще не определена.nullиundefined- ложные значения.nullиundefinedявляются примитивами.typof nullявляется объектом и это ошибка JavaScript- в функции и объекте значение по умолчанию с
undefinedбудет использовать значение, аnull- нет. JSONможет обрабатывать толькоnull, но неundefined


