Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/435.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何检查js变量是否存在?_Javascript_Jshint - Fatal编程技术网

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

Javascript 如何检查js变量是否存在?,javascript,jshint,Javascript,Jshint,我有一些变量,我需要从一个大项目的另一部分的全局变量中获取。目前,我正在设置和默认变量,如下所示: var identifier = Site.settings.urls.accountsUrl || 'https://staging.mysite.com'; if (typeof Site === 'undefined') { // There is no Site. } 我的想法是,我的dev实例上不存在Site,但它应该在prod中动态使用。因此,在dev中,Site对象始终是

我有一些变量,我需要从一个大项目的另一部分的全局变量中获取。目前,我正在设置和默认变量,如下所示:

var identifier = Site.settings.urls.accountsUrl || 'https://staging.mysite.com';
if (typeof Site === 'undefined') {
    // There is no Site.
}
我的想法是,我的dev实例上不存在Site,但它应该在prod中动态使用。因此,在dev中,Site对象始终是未定义的。这样工作很好,浏览器不会抱怨,但jshint会让我知道站点未定义。有更好的方法吗?我知道这有点主观,但我有兴趣看到回应


谢谢。

您可以这样做:

var identifier = Site.settings.urls.accountsUrl || 'https://staging.mysite.com';
if (typeof Site === 'undefined') {
    // There is no Site.
}
但是有点难看


一开始就定义一个表示“我是开发实例”的全局变量,然后在Prod实例中用一个表示“我是Prod实例”的值覆盖它,怎么样?至少这样,变量始终存在。

您可以这样做:

var identifier = Site.settings.urls.accountsUrl || 'https://staging.mysite.com';
if (typeof Site === 'undefined') {
    // There is no Site.
}
但是有点难看


一开始就定义一个表示“我是开发实例”的全局变量,然后在Prod实例中用一个表示“我是Prod实例”的值覆盖它,怎么样?至少这样,变量总是存在的。

我的建议是这样的

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

基本上,我们总是尝试将
标识符设置为URL,但如果第二个值不存在,则将默认设置为第二个值。

我的建议如下

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

基本上,我们总是尝试将
标识符设置为URL,但如果它不存在,将默认为第二个值。

如果您正在查找一行代码,并且如果
站点在没有
设置的情况下从未定义过
,则可以执行以下操作:

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;

如果您正在查找一行程序,并且如果在没有
设置的情况下从未定义
站点
,则可以执行以下操作:

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;

如果没有定义
站点
,我想这会导致运行时错误。我希望我不必使用全局变量,但有时你会这样做。似乎不会导致运行时错误。实际上,只是做了一个健全性检查,上面的语句没有定义回退。谢谢大家。我同意里奇的建议,因为我认为这是最有效率和可读性的。有点丑,但小鸭也是。和平。如果没有定义
站点
,我想这会导致运行时错误。我希望我不必使用全局,但有时你会这样做。似乎不会导致运行时错误。实际上,只是做了一个健全性检查,上面的语句没有定义回退。谢谢大家。我同意里奇的建议,因为我认为这是最有效率和可读性的。有点丑,但小鸭也是。和平。我本来就是这样做的,但有点难看,因为要求的else条件。我本来就是这样做的,但有点难看,因为要求的else条件。我喜欢三元,但jshint不喜欢。)我喜欢三元,但jshint不喜欢