Дифференциация "not defined" от "undefined"

Как различить случаи, когда:

  1. Переменная объявлена, но имеет значение undefined:

const obj = undefined
console.log( typeof obj === 'undefined');  // true
console.log(obj);   // undefined

  1. Переменная не объявлена:

console.log( typeof obj === 'undefined');   // true
console.log(obj);   // Uncaught ReferenceError ReferenceError: obj is not defined

Наверное, можно ловить исключение, выполняя obj === undefined, и делать вывод на на основании этого. Но, наверняка, есть более простой способ?


Ответы (1 шт):

Автор решения: EzioMercer

Дело в том что когда переменная не объявлена то она выкидывает Error, а если объявлена то никаких ошибок нет. А если есть Error то мы легко можем его поймать в try catch блоке и сделать необходимые действия. Ниже пример:

try {
  notDefined;
  console.log('Defined with value undefined 1');
} catch {
  console.log('Is not defined 1');
}

const definedWithUndefinedValue = undefined;

try {
  definedWithUndefinedValue;
  console.log('Defined with value undefined 2');
} catch {
  console.log('Is not defined 2');
}

→ Ссылка