Кратко
СкопированоNull — это примитивный тип данных, который состоит из единственного значения null
.
Значение null
используют, когда нужно обозначить намеренное отсутствие значения.
Пример
СкопированоПароля нет:
const password = null
const password = null
В списке важных дел по дням недели пользователь решил, что в субботу и воскресенье главного дела нет:
const mainFocusByDays = { mon: 'Исправить баг в вёрстке', tue: 'Разобрать почту', wed: 'Написать бота', thu: 'Изучить примитивные типы', fri: 'Отправить резюме в Яндекс', sat: null, sun: null}
const mainFocusByDays = { mon: 'Исправить баг в вёрстке', tue: 'Разобрать почту', wed: 'Написать бота', thu: 'Изучить примитивные типы', fri: 'Отправить резюме в Яндекс', sat: null, sun: null }
Как понять
Скопированоnull
обозначает понятия «отсутствует», «ничего», «пусто» или «значение неизвестно». Оно всегда явно задаётся программистом, JavaScript автоматически не устанавливает его.
В JavaScript null
используется только для обозначения конца цепочки прототипов, чтобы показать, что следующий прототип отсутствует.
В языке существует похожий примитив undefined
, он обозначает, что значение ещё не установлено. Их можно легко спутать, потому что оба обозначают отсутствие значения. Разница состоит в том, что null
обозначает намеренное отсутствие, а undefined
— неявное.
Например, сам JavaScript использует undefined
для обозначения не проинициализированных переменных:
let newValueconsole.log(newValue)// undefined// в явном виде говорим, что значение отсутствуетnewValue = null
let newValue console.log(newValue) // undefined // в явном виде говорим, что значение отсутствует newValue = null
На практике
Скопированосоветует Скопировано
🛠 Оператор typeof
некорректно определяет тип у null
и возвращает значение 'object'
по историческим причинам.
console.log(typeof null)// 'object'
console.log(typeof null) // 'object'
🛠 Разделение между undefined
и null
очень слабое. Это рекомендация, которую не все выполняют. Команды могут договориться о своей трактовке этих значений.
Например, в приложении нужно отобразить список пользователей, полученный с сервера. Пока данных нет, мы рисуем заглушку. В этом случае мы можем трактовать значение undefined
как «отправили запрос на сервер, рисуем заглушку и ждём ответа», а null
как «сервер ответил, что у него нет данных».
🛠 Уточняйте договорённости по undefined
и null
на проекте. Часто они не зафиксированы на бумаге, но имеют большое значение.
На собеседовании
Скопировано отвечает
Скопированоnull
обычно задаётся переменной явно и означает, что она ничего не содержит. undefined
показывает, что значение переменной «не определено». undefined
обычно присваивается переменной, когда она была объявлена, но не было определено её начальное значение. Также, undefined
может возвращаться и из функции — это происходит, если функции явно не возвращает ничего другого. null
же обычно возвращают из функции явно, чтобы показать, что результат функции равен «ничему».
Без начального значения можно оставлять только переменную объявленную через let
или var
. Если объявить переменную через const
и не задать ей начального значения, будет ошибка: Uncaught SyntaxError
.
Оператор typeof
для null
работает странно. typeof
выдаст нам строку 'object'. Это официально признанная ошибка в языке, сохраняемая для совместимости. Ошибка тут в том, что null
это отдельный тип данных, а не объект. С undefined
всё куда лучше и typeof
выдаст нам 'undefined'. Почитать ещё о typeof
можно здесь.
Поговорим немного о приведении типов. Для начала, пример:
console.log(null + null); // 0console.log(undefined + undefined); // NaN
console.log(null + null); // 0 console.log(undefined + undefined); // NaN
Почему так?
null
во время сложения приводится к нулю. Это логично, так как числовым значением «ничего» является как раз 0.
С undefined
другое поведении, так как JavaScript пытается привести его к числу, но у него не получается и в результате мы получаем NaN
.
Немного упомяну и про оператор нулевого слияния (?
). В выражении между двумя операндами, он будет возвращать первый операнд, если он не равен null
или undefined
. Можно сказать, что ?
приравнивает смысл undefined
и null
к «ничего не содержит» и в этом случае, кладёт в переменную значение второго операнда.