Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 15.04.2022, 11:18
Аспирант
Отправить личное сообщение для Tipylja Посмотреть профиль Найти все сообщения от Tipylja
 
Регистрация: 17.04.2017
Сообщений: 72

Проверка существует ли переменная
Всем привет. У меня есть логика, которое должна отрабатывать на определенных страницах — например если есть переменная 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)


Которая ссылается как раз на мое условие проверки
То есть я хочу как раз таки избавится от ошибок проверяя существует ли переменная, но как раз на эту проверку я и получил ошибку и это очень странно, ведь я так всегда делал, я совсем не могу понять почему так происходит.
Ответить с цитированием
  #2 (permalink)  
Старый 15.04.2022, 11:31
Аспирант
Отправить личное сообщение для Tipylja Посмотреть профиль Найти все сообщения от Tipylja
 
Регистрация: 17.04.2017
Сообщений: 72

Вроде разобрался, у меня все скрипты собираются вебмаком, сейчас попробовал код обернуть в try...catch
И ошибка пропала, наверное вебпак добавляет какую-то асинхронность в код, но я все равно не понял почему js может ругаться на проверку, существует ли переменная
Ответить с цитированием
  #3 (permalink)  
Старый 15.04.2022, 13:44
Аватар для voraa
Профессор
Отправить личное сообщение для voraa Посмотреть профиль Найти все сообщения от voraa
 
Регистрация: 03.02.2020
Сообщений: 2,745

Сообщение от Tipylja
но я все равно не понял почему js может ругаться на проверку, существует ли переменная
Потому, что обращение к несуществующей переменной - это ошибка.
А if (mse2Config) {
проверяет, что переменная есть, и ее значение не равно undefined, null, 0, false, "", NaN
Ответить с цитированием
  #4 (permalink)  
Старый 15.04.2022, 13:51
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,109

Tipylja,
if (window.mse2Config)
Ответить с цитированием
  #5 (permalink)  
Старый 15.04.2022, 14:51
Аватар для voraa
Профессор
Отправить личное сообщение для voraa Посмотреть профиль Найти все сообщения от voraa
 
Регистрация: 03.02.2020
Сообщений: 2,745

А если ее через let/const определяют?
Ответить с цитированием
  #6 (permalink)  
Старый 15.04.2022, 15:11
Аспирант
Отправить личное сообщение для Tipylja Посмотреть профиль Найти все сообщения от Tipylja
 
Регистрация: 17.04.2017
Сообщений: 72

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

Получилось так проверить typeof mse2Config !=="undefined"
Ответить с цитированием
  #7 (permalink)  
Старый 18.04.2022, 08:31
Аватар для micscr
Профессор
Отправить личное сообщение для micscr Посмотреть профиль Найти все сообщения от micscr
 
Регистрация: 10.09.2009
Сообщений: 1,576

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

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


Неожиданно, что при этом варианте ушла ошибка "mse2Config is not defined" в строгом режиме. Почитаю доки.
Ответить с цитированием
  #8 (permalink)  
Старый 18.04.2022, 09:50
Аватар для micscr
Профессор
Отправить личное сообщение для micscr Посмотреть профиль Найти все сообщения от micscr
 
Регистрация: 10.09.2009
Сообщений: 1,576

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

typeof undeclaredVariable === 'undefined';
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Проверка файла. Узнать существует он или нет. Node js vlzkonopatov AJAX и COMET 8 28.11.2014 19:28
Проверка фала. Узнать существует он или нет. Node js vlzkonopatov AJAX и COMET 0 28.11.2014 12:05
Проверка: существует ли такая переменная Faab Общие вопросы Javascript 2 16.03.2014 22:56
проверка формы не работает в ie begelme Javascript под браузер 6 13.08.2013 01:00
существует ли переменная Nightmare Общие вопросы Javascript 10 18.09.2011 23:52