1. Статусы переменной
Переменная может быть определена или не определена.
Переменная будет определена, когда она была определена специальным оператором в текущей области видимости (scope). Эти операторы - let, var и const.
Примеры:
const pi = 3.14; // pi определена
let result; // result определен
Переменная может быть инициализирована или не инициализирована.
Переменная становится инициализированной, когда её присвоили какое-то значение. Например:
const pi = 3.14; // pi инициализирована
let result; // result не инициализирован
2. Проверка с помощью typeof
Typeof определяет тип переменной ('number', 'string', 'function'). Если переменная не определена - typeof возвращает 'undefined'.
if (typeof myVar === 'undefined') {
// myVar не определена ИЛИ не инициализирована
} else {
// myVar определена И инициализирована
}
3. Проверка try / catch
Ошибку доступа к переменной, которая не определна, можно поймать в блоке try / catch. При этом инициализирована ли переменная в данном случае - не определена.
try {
missingVar;
console.log('missingVar определена')
} catch(e) {
e; // => ошибка типа ReferenceError
console.log('missingVar не определена');
}
4. Использя window.hasOwnProperty
Если переменная определена на глобальном уровне видимости - она "автоматически" становится свойством объекта верхнего уровня window. Таким образом, можно проверить наличие свойства с помощью объектного метода hasOwnProperty. Если переменная не определена - то и свойства такого у window нет.
// Глобальная область видимости, НЕ внутри других функций
var num = 19;
function greet() {
return 'Hello!';
}
window.hasOwnProperty('num'); // => true
window.hasOwnProperty('greet'); // => true