JavaScript: Тестирование для undefined throws var не определено ошибка...?

Это странность, которую я иногда видел в JS - возможно, кто-то может пролить свет на нее.

Я выполняю тест для undefined для переменной:

if (x !== 'undefined'){}

или даже

if (typeof x !== 'undefined'){}

И браузер все равно выдает сообщение об ошибке:

ReferenceError: x is not defined

Даже

if (x) {} 

выдает ошибку.

Это глобальная переменная уровня структуры, которую я проверяю, поэтому, возможно, что-то делать с разными областями. (Нет критических анализов глобальных переменных - опять же, это наличие рамки, которую я тестирую).

Ответы

Ответ 1

Это довольно странно. Как насчет:

if (window['x']) {
   // It defined
}

Означает ли это выше? Кроме того, что такое интерпретатор браузера или JavaScript?

Ответ 2

@Anurag прав, второе условие не должно быть связано с ошибкой.

if (typeof x !== 'undefined'){// won't through error even if x is not declared
}

Я думаю, проблема в том, что x не объявляется как переменная. Если вы объявите его, но оставьте его неназначенным, он рассматривается как undefined и не будет проходить через ошибку, в вашем случае он не будет объявлен.

var x;
if (x !== undefined){// won't through error
}

Поля объектов обрабатываются по-разному

if(window.x !== undefined){// won't through error

}

кажется, что x в этом случае объявляется во время выполнения, если не найден, поэтому возвращает undefined

Надеюсь, это поможет!

Ответ 3

Ваша проблема в том, что undefined !== 'undefined'