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