В JavaScript есть важное различие между необъявленными (undeclared) и неопределёнными (undefined) переменными, которое часто вызывает путаницу у разработчиков.
Это переменные, которые были объявлены, но им не было присвоено значение.
Характеристики:
undefined
Пример:
let myVar;
console.log(myVar); // undefined
console.log(typeof myVar); // "undefined"
Это переменные, которые никогда не объявлялись с помощью var
, let
или const
.
Характеристики:
'use strict'
) ошибка возникает всегдаПример:
console.log(neverDeclared); // ReferenceError: neverDeclared is not defined
Характеристика | CommonJS | ES Modules |
---|---|---|
Синтаксис | require/exports | import/export |
Загрузка | Синхронная | Асинхронная |
Браузерная поддержка | Нет (требует сборки) | Нативная |
Дерево зависимостей | Статическое | Статическое |
this в модуле | module.exports | undefined |
Интересное поведение оператора typeof
с необъявленными переменными:
// В нестрогом режиме
console.log(typeof undeclaredVar); // "undefined" (но переменной не существует!)
В строгом режиме:
'use strict';
console.log(typeof undeclaredVar); // ReferenceError
if (typeof myVar !== 'undefined') {
// Переменная объявлена
}
if (neverDeclaredVar) { // ReferenceError в строгом режиме
// Этот код не выполнится
}
if ('myVar' in window) { // Для глобальных переменных
// Переменная существует
}
'use strict'
typeof
Ключевое отличие — неопределённые переменные существуют в области видимости, но не имеют значения, тогда как необъявленные вообще не существуют в коде. Понимание этой разницы критически важно для отладки и написания надёжного кода. Всегда используйте строгий режим и правильные проверки для работы с переменными.