Как я могу определить, определена ли на странице переменная JavaScript?

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

Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
117
0
93 716
7

Ответы 7

попробуйте использовать неопределенный

if (x !== undefined)

Так выполняются проверки конкретных функций браузера.

Ты уверен, что синтаксис работает точно, Ник? Для меня это ошибка, x не определено.

Paul Batum 27.09.2008 03:19

Как за это набралось 4 голоса? Он делает почти то же самое неправильное, что и OP.

Juan Mendes 12.02.2011 04:21

Проблема в том, что неопределенный может быть переопределено,, поэтому используйте это, только если вы уверены, что это не так в вашей области.

Andrew Hedges 08.08.2011 21:14

@AndrewHedges Как указывали другие, другая проблема заключается в том, что предполагается, что x объявлен. Попробуйте вставить «x == undefined» в консоль JS, и вы получите справочную ошибку.

Jason Newell 19.03.2016 03:35

У меня заработало с помощью if (typeof(x) != "undefined")

вы проверяете, является ли x = строкой, а не если x не определен.

FlySwat 27.09.2008 03:02

Джонатан, ты в этом уверен? Джон Ресиг использует именно этот подход в своем руководстве по javascript здесь: ejohn.org/apps/learn/#11 Вы можете запустить сценарий на странице и убедиться в этом сами.

Paul Batum 27.09.2008 03:13

Я только что проверил это в firebug, и undefined отображает строку "undefined", кто-то серьезно курил крэк, когда они писали JS, я исправлюсь.

FlySwat 27.09.2008 03:32

@Ben: строка "undefined" более правильная - если используется !==, кавычки необходимы, потому что typeof приводит к строке.

Sophie Alpert 15.08.2011 03:52

@BenBederson @BenAlpert, кроме того, undefined можно переопределить! Используйте строку.

Derek Prior 08.05.2012 23:45

@Derek Ого, я только что кое-что узнал. Кажется, они начали исправлять это в последних версиях браузеров, по крайней мере, так что, надеюсь, это то, что я снова забуду лет через десять.

Jason Newell 19.03.2016 03:32

Оператор typeof, в отличие от других операторов, не вызывает исключение ReferenceError при использовании с необъявленным символом, поэтому его безопасно использовать ...

if (typeof a != "undefined") {
    a();
}

Предполагая, что ваша функция или переменная определена в типичной «глобальной» области (область действия см .: окно's), я предпочитаю:

if (window.a != null) {
   a();
}

или даже следующее, если вы проверяете существование функции:

if (window.a) a();

Чтобы избежать случайного присвоения, я имею привычку менять порядок условного выражения на обратный:

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

эй, я тоже поменял порядок! не могу вспомнить, где я это узнал ...

just mike 27.09.2008 17:44

Вы хотите использовать !==, а не ===. :)

Cipi 08.10.2010 16:50

обратное назначение ненавижу.

Matt Connolly 11.10.2012 04:28

предложения на английском языке полностью обратные

Alex K 08.01.2014 17:16

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

Jason Newell 19.03.2016 03:10

Не пишите такой код. Мы не Йода. Код существует исключительно для чтения. Если удобочитаемость не является вашей целью, напишите сборку и сохраните циклы. Python решил эту проблему лучше всего, создав явное присваивание внутри операторов if.

Luke Dupin 19.11.2020 23:31

Вы можете сделать это с помощью:

if (window.x! == undefined) { // Вы здесь кодируете }

Это работает с «переменными» в глобальной области видимости только потому, что они на самом деле являются свойствами объекта «окно». Переменные, объявленные с помощью оператора «var», не будут тестироваться таким образом. Подробнее здесь: ahedg.es/84

Andrew Hedges 08.08.2011 21:16

Кроме того, это предполагает, что глобальным объектом является окно, что (обычно?) Имеет место в браузере, но не обязательно верно в других средах.

Jason Newell 19.03.2016 03:16

Как уже упоминалось, оператор typeof может оценить даже необъявленный идентификатор, не выдавая ошибки.

alert (typeof sdgfsdgsd);

Покажет "undefined", где что-то вроде

alert (sdgfsdgsd);

выдаст ReferenceError.

Другие вопросы по теме