Как проверить, существует ли переменная 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;