Кратко
СкопированоUndefined — это примитивный тип данных, состоящий из одного значения undefined. Оно используется, чтобы обозначить неизвестное или неопределённое значение.
JavaScript автоматически устанавливает значение undefined объявленным переменным, которые не были проинициализированы значением.
Пример
СкопированоJavaScript автоматически устанавливает значение undefined новой переменной:
let nameconsole.log(name)// undefined
let name
console.log(name)
// undefined
Также JavaScript автоматически устанавливает значение undefined в аргумент функции, если значение не передали при вызове:
function hello(name) { console.log('Привет, ' + name)}hello('Витя')// Привет, Витяhello()// Привет, undefined
function hello(name) {
console.log('Привет, ' + name)
}
hello('Витя')
// Привет, Витя
hello()
// Привет, undefined
Вручную установленное undefined используют, чтобы обозначить неизвестное значение:
const person = { name: 'Пётр', lastName: 'Романов', age: undefined}
const person = {
name: 'Пётр',
lastName: 'Романов',
age: undefined
}
Но будьте аккуратны, когда устанавливаете undefined свойствам объектов. Если у объекта person удалить age, то при обращении к несуществующему свойству также вернётся undefined.
Как понять
Скопированоundefined обозначает, что значение по каким-то причинам ещё не установлено или неизвестно. В этом контексте его использует сам язык JavaScript.
В языке существует похожий примитив null. Он обозначает, что значение отсутствует. undefined и null можно легко спутать, потому что это близкие понятия. Различие состоит в том, что null обозначает отсутствие значения, а undefined — что значение неизвестно или не задано.
На практике
Скопированосоветует
Скопировано🛠 Разделение между 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 к «ничего не содержит» и в этом случае, кладёт в переменную значение второго операнда.