Проверка существует ли переменная
Всем привет. У меня есть логика, которое должна отрабатывать на определенных страницах — например если есть переменная 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) Которая ссылается как раз на мое условие проверки То есть я хочу как раз таки избавится от ошибок проверяя существует ли переменная, но как раз на эту проверку я и получил ошибку и это очень странно, ведь я так всегда делал, я совсем не могу понять почему так происходит. |
Вроде разобрался, у меня все скрипты собираются вебмаком, сейчас попробовал код обернуть в try...catch
И ошибка пропала, наверное вебпак добавляет какую-то асинхронность в код, но я все равно не понял почему js может ругаться на проверку, существует ли переменная |
Цитата:
А if (mse2Config) { проверяет, что переменная есть, и ее значение не равно undefined, null, 0, false, "", NaN |
Tipylja,
if (window.mse2Config) |
А если ее через let/const определяют?
|
Цитата:
Получилось так проверить typeof mse2Config !=="undefined" |
Мне больше нравится вариант от рони
, но смотрю что и так работает typeof mse2Config !=="undefined" Неожиданно, что при этом варианте ушла ошибка "mse2Config is not defined" в строгом режиме. Почитаю доки. |
В https://developer.mozilla.org есть в примере, так что ок
typeof undeclaredVariable === 'undefined'; |
Часовой пояс GMT +3, время: 18:51. |