null, undefined и undeclared
undefined
Значение не было присвоено. Движок присваивает его автоматически.
let x // undefined (объявлена, но не инициализирована)
function f() {} // возвращает undefined
const obj = {}
obj.missing // undefined (нет такого свойства)
null
Явно заданное «пустое» значение. Разработчик сам ставит null - это сигнал «значения нет намеренно».
let user = null // пользователь ещё не загружен
user = fetchUser() // теперь объект или null если не найден
undeclared
Переменная вообще не объявлена. Обращение к ней - ReferenceError.
console.log(foo) // ReferenceError: foo is not defined
typeof foo // "undefined" - исключение, typeof не кидает ошибку
typeof
typeof undefined // "undefined"
typeof null // "object" ← исторический баг JS
typeof 42 // "number"
typeof "str" // "string"
typeof true // "boolean"
typeof {} // "object"
typeof [] // "object"
typeof function(){} // "function"
Проверки
// Проверить null или undefined одновременно:
if (value == null) { /* null или undefined */ }
if (value != null) { /* точно не null и не undefined */ }
// Nullish coalescing - значение по умолчанию
const name = user?.name ?? "Аноним"
// Optional chaining - безопасный доступ
const city = user?.address?.city // undefined если чего-то нет