В 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
Ключевое отличие — неопределённые переменные существуют в области видимости, но не имеют значения, тогда как необъявленные вообще не существуют в коде. Понимание этой разницы критически важно для отладки и написания надёжного кода. Всегда используйте строгий режим и правильные проверки для работы с переменными.