如何检查js变量是否存在?

时间:2013-11-18 23:15:55

标签: javascript jshint

我需要从一个大项目的另一部分中获取全局变量。目前,我正在设置和默认这样的变量:

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

这个想法是我的开发实例上不存在Site,但它应该在prod中动态使用。所以在dev中,Site对象总是未定义的。工作得很好,浏览器不会抱怨,但jshint会让我知道网站未定义。有一个更好的方法吗?我知道这有点主观,但我很有兴趣看到回应。

感谢。

3 个答案:

答案 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;