我需要从一个大项目的另一部分中获取全局变量。目前,我正在设置和默认这样的变量:
var identifier = Site.settings.urls.accountsUrl || 'https://staging.mysite.com';
这个想法是我的开发实例上不存在Site,但它应该在prod中动态使用。所以在dev中,Site对象总是未定义的。工作得很好,浏览器不会抱怨,但jshint会让我知道网站未定义。有一个更好的方法吗?我知道这有点主观,但我很有兴趣看到回应。
感谢。
答案 0 :(得分:3)
你可以这样做:
if (typeof Site === 'undefined') {
// There is no Site.
}
但它有点难看。
如何在一开始就定义一个全局,这意味着“我是Dev实例”,然后在Prod实例中覆盖它,其值为“我是Prod实例”?至少这种方式变量总是存在。
答案 1 :(得分:1)
我的建议是这样的......
try {
var identifier = Site.settings.urls.accountsUrl
}
catch (e) {
var identifier = 'https://staging.mysite.com'
}
基本上,我们总是尝试将identifier
设置为URL,但如果不存在则默认为第二个值。
答案 2 :(得分:0)
如果您正在寻找单行和,如果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;