Как проверить, существует ли переменная js?

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

var identifier = Site.settings.urls.accountsUrl || 'https://staging.mysite.com';

Идея в том, что Site не существует в моем экземпляре dev, но он должен динамически использоваться в prod. Так что в dev объект Site всегда не определен. Хорошо работает, как это, и браузер не жалуется, но jshint даст мне знать, что сайт не определен. Есть лучший способ сделать это? Я знаю, что это немного субъективно, но мне интересно видеть ответы.

Благодарю.

3 ответа

Решение

Вы можете сделать это так:

if (typeof Site === 'undefined') {
    // There is no Site.
}

но это немного некрасиво

Как насчет определения глобального в самом начале, которое означает "Я - экземпляр Dev", а затем переопределения его в экземпляре Prod значением, означающим "Я - экземпляр Prod"? По крайней мере, так всегда существует переменная.

Мое предложение будет что-то вроде этого...

try {
    var identifier = Site.settings.urls.accountsUrl
}
catch (e) {
    var identifier = 'https://staging.mysite.com'
}

В основном, мы всегда стараемся установить identifier на URL, но по умолчанию будет второе значение, если оно не существует.

Если вы ищете однострочник и если Site никогда не определяется без settings.*, вы можете сделать это:

var identifier = window.Site && Site.settings.urls.accountsUrl || 'https://staging.mysite.com';

Тем не менее, может иметь смысл иметь Site.settings.url.accountsUrl всегда быть определенным. Создайте файл конфигурации по умолчанию. Включите этот файл в верхней части страницы. И включать переопределения сразу после.


JavaScript также поддерживает троичный оператор, если вы считаете, что это безопаснее и / или красивее:

var identifier = typeof(Site) == 'undefined' ? 'https://staging.mysite.com' : Site.settings.urls.accountsUrl;
Другие вопросы по тегам