Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Проверка существует ли переменная (https://javascript.ru/forum/misc/83894-proverka-sushhestvuet-li-peremennaya.html)

Tipylja 15.04.2022 11:18

Проверка существует ли переменная
 
Всем привет. У меня есть логика, которое должна отрабатывать на определенных страницах — например если есть переменная mse2Config то будет выполнятся скрипт, что бы не было ошибок на странице, где этой переменной нет, я заворачиваю логику в условие, например так:
$(document).ready(function () {
  if (mse2Config) {
    
    const limit = mse2Config.limit;
    if (limit) {
      const $select = $("#mse2_limit");

      $select
        .find(
          `option[value='${limit}']`
        )
        .attr("selected", "selected");
    }
  }
});


Сама логика не важна, дело в проверке — на странице, где есть mse2Config - все работает как нужно
Но, на страницах где mse2Config нет я получаю ошибку
jquery.js:4059 Uncaught ReferenceError: mse2Config is not defined
    at HTMLDocument.eval (limit.js:6:3)
    at mightThrow (jquery.js:3766:29)
    at process (jquery.js:3834:12)


Которая ссылается как раз на мое условие проверки
То есть я хочу как раз таки избавится от ошибок проверяя существует ли переменная, но как раз на эту проверку я и получил ошибку и это очень странно, ведь я так всегда делал, я совсем не могу понять почему так происходит.

Tipylja 15.04.2022 11:31

Вроде разобрался, у меня все скрипты собираются вебмаком, сейчас попробовал код обернуть в try...catch
И ошибка пропала, наверное вебпак добавляет какую-то асинхронность в код, но я все равно не понял почему js может ругаться на проверку, существует ли переменная

voraa 15.04.2022 13:44

Цитата:

Сообщение от Tipylja
но я все равно не понял почему js может ругаться на проверку, существует ли переменная

Потому, что обращение к несуществующей переменной - это ошибка.
А if (mse2Config) {
проверяет, что переменная есть, и ее значение не равно undefined, null, 0, false, "", NaN

рони 15.04.2022 13:51

Tipylja,
if (window.mse2Config)

voraa 15.04.2022 14:51

А если ее через let/const определяют?

Tipylja 15.04.2022 15:11

Цитата:

Сообщение от voraa (Сообщение 544702)
Потому, что обращение к несуществующей переменной - это ошибка.
А if (mse2Config) {
проверяет, что переменная есть, и ее значение не равно undefined, null, 0, false, "", NaN

Почему-то я думал, что как раз так и можно проверить.....спасибо

Получилось так проверить typeof mse2Config !=="undefined"

micscr 18.04.2022 08:31

Мне больше нравится вариант от рони

, но смотрю что и так работает
typeof mse2Config !=="undefined"


Неожиданно, что при этом варианте ушла ошибка "mse2Config is not defined" в строгом режиме. Почитаю доки.

micscr 18.04.2022 09:50

В https://developer.mozilla.org есть в примере, так что ок

typeof undeclaredVariable === 'undefined';


Часовой пояс GMT +3, время: 18:51.