什么是检查是否全局变量存在的正确方法?(What is the correct way to che

2019-06-26 11:06发布

JSLint的是不是通过这个作为一个有效的代码:

/* global someVar: false */
if (typeof someVar === "undefined") {
    var someVar = "hi!";
}

什么是正确的方法是什么?

Answer 1:

/*global window */

if (window.someVar === undefined) {
    window.someVar = 123456;
}

if (!window.hasOwnProperty('someVar')) {
    window.someVar = 123456;
}


Answer 2:

/**
 * @param {string} nameOfVariable
 */
function globalExists(nameOfVariable) {
    return nameOfVariable in window
}

不要紧,你是否创建了VAR FOO或window.foo一个全局变量 - 在全球范围内VAR创建的变量被写入窗口。



Answer 3:

如果你是想只分配,如果它不存在一个全局变量,请尝试:

window.someVar = window.someVar || 'hi';

要么

window['someVar'] = window['someVar'] || 'hi';


Answer 4:

尝试

variableName in window

要么

typeof window[variableName] != 'undefined'

要么

window[variableName] !== undefined

要么

window.hasOwnProperty(variableName)


Answer 5:

我觉得这其实是JSLint的一个问题。 它会发出以下错误:

意外的 'typeof运算'。 直接与“未定义”进行比较。

我相信这是不好的建议。 在JavaScript中, undefined是一个全局变量,它是,通常情况下,不确定的。 但是,一些浏览器允许脚本来修改它,就像这样: window.undefined = 'defined' 。 如果是这样的情况下,直接与比较undefined会导致意想不到的结果。 幸运的是,目前的ECMA 5兼容的浏览器不允许分配到undefined (和将扔在严格模式除外)。

我喜欢typeof someVar === "undefined" ,为您发布,或someVar in window为Susei建议。



Answer 6:

 if (typeof someVar === "undefined") { var someVar = "hi!"; } 

将检查someVar (局部或全局)是不确定的。

如果你想检查一个全局变量,你可以使用

if(window['someVar'] === undefined) {
    ...
}

假设这是在浏览器:)



Answer 7:

bfavaretto不正确。

设置全局未定义的值不会改变对不确定对象的测试。 在你喜欢的浏览器的JavaScript控制台试试这个:

var udef; var idef = 42;
alert(udef === undefined); // Alerts "true".
alert(idef === undefined); // Alerts "false".
window.undefined = 'defined';
alert(udef === undefined); // Alerts "true".
alert(idef === undefined); // Alerts "false".

这简直是​​因为JavaScript忽略所有和任何企图值要在不确定的变量设置。

window.undefined = 'defined';
alert(window.undefined); // Alerts "undefined".


Answer 8:

这将是执行检查的简单方法。

但是,如果这个检查将失败variableName声明并分配与boolean value: false

if(window.variableName){

}


文章来源: What is the correct way to check if a global variable exists?