Как я могу проверить в JavaScript, определена ли переменная на странице? Предположим, я хочу проверить, определена ли на странице переменная с именем «x». Если я использую if (x != null), это дает мне ошибку.



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


попробуйте использовать неопределенный
if (x !== undefined)
Так выполняются проверки конкретных функций браузера.
Как за это набралось 4 голоса? Он делает почти то же самое неправильное, что и OP.
Проблема в том, что неопределенный может быть переопределено,, поэтому используйте это, только если вы уверены, что это не так в вашей области.
@AndrewHedges Как указывали другие, другая проблема заключается в том, что предполагается, что x объявлен. Попробуйте вставить «x == undefined» в консоль JS, и вы получите справочную ошибку.
У меня заработало с помощью if (typeof(x) != "undefined")
вы проверяете, является ли x = строкой, а не если x не определен.
Джонатан, ты в этом уверен? Джон Ресиг использует именно этот подход в своем руководстве по javascript здесь: ejohn.org/apps/learn/#11 Вы можете запустить сценарий на странице и убедиться в этом сами.
Я только что проверил это в firebug, и undefined отображает строку "undefined", кто-то серьезно курил крэк, когда они писали JS, я исправлюсь.
@Ben: строка "undefined" более правильная - если используется !==, кавычки необходимы, потому что typeof приводит к строке.
@BenBederson @BenAlpert, кроме того, undefined можно переопределить! Используйте строку.
@Derek Ого, я только что кое-что узнал. Кажется, они начали исправлять это в последних версиях браузеров, по крайней мере, так что, надеюсь, это то, что я снова забуду лет через десять.
Оператор typeof, в отличие от других операторов, не вызывает исключение ReferenceError при использовании с необъявленным символом, поэтому его безопасно использовать ...
if (typeof a != "undefined") {
a();
}
Предполагая, что ваша функция или переменная определена в типичной «глобальной» области (область действия см .: окно's), я предпочитаю:
if (window.a != null) {
a();
}
или даже следующее, если вы проверяете существование функции:
if (window.a) a();
Чтобы избежать случайного присвоения, я имею привычку менять порядок условного выражения на обратный:
if ('undefined' !== typeof x) {
эй, я тоже поменял порядок! не могу вспомнить, где я это узнал ...
Вы хотите использовать !==, а не ===. :)
обратное назначение ненавижу.
предложения на английском языке полностью обратные
Это, несомненно, лучший способ сделать это, но меня беспокоит его неуклюжесть (к тому же он часто несовместим с кодом других людей). Я хочу, чтобы это было неправильно.
Не пишите такой код. Мы не Йода. Код существует исключительно для чтения. Если удобочитаемость не является вашей целью, напишите сборку и сохраните циклы. Python решил эту проблему лучше всего, создав явное присваивание внутри операторов if.
Вы можете сделать это с помощью:
if (window.x! == undefined) { // Вы здесь кодируете }
Это работает с «переменными» в глобальной области видимости только потому, что они на самом деле являются свойствами объекта «окно». Переменные, объявленные с помощью оператора «var», не будут тестироваться таким образом. Подробнее здесь: ahedg.es/84
Кроме того, это предполагает, что глобальным объектом является окно, что (обычно?) Имеет место в браузере, но не обязательно верно в других средах.
Как уже упоминалось, оператор typeof может оценить даже необъявленный идентификатор, не выдавая ошибки.
alert (typeof sdgfsdgsd);
Покажет "undefined", где что-то вроде
alert (sdgfsdgsd);
выдаст ReferenceError.
Ты уверен, что синтаксис работает точно, Ник? Для меня это ошибка, x не определено.