JSLint的是不是通过这个作为一个有效的代码:
/* global someVar: false */
if (typeof someVar === "undefined") {
var someVar = "hi!";
}
什么是正确的方法是什么?
JSLint的是不是通过这个作为一个有效的代码:
/* global someVar: false */
if (typeof someVar === "undefined") {
var someVar = "hi!";
}
什么是正确的方法是什么?
/*global window */
if (window.someVar === undefined) {
window.someVar = 123456;
}
if (!window.hasOwnProperty('someVar')) {
window.someVar = 123456;
}
/**
* @param {string} nameOfVariable
*/
function globalExists(nameOfVariable) {
return nameOfVariable in window
}
不要紧,你是否创建了VAR FOO或window.foo一个全局变量 - 在全球范围内VAR创建的变量被写入窗口。
如果你是想只分配,如果它不存在一个全局变量,请尝试:
window.someVar = window.someVar || 'hi';
要么
window['someVar'] = window['someVar'] || 'hi';
尝试
variableName in window
要么
typeof window[variableName] != 'undefined'
要么
window[variableName] !== undefined
要么
window.hasOwnProperty(variableName)
我觉得这其实是JSLint的一个问题。 它会发出以下错误:
意外的 'typeof运算'。 直接与“未定义”进行比较。
我相信这是不好的建议。 在JavaScript中, undefined
是一个全局变量,它是,通常情况下,不确定的。 但是,一些浏览器允许脚本来修改它,就像这样: window.undefined = 'defined'
。 如果是这样的情况下,直接与比较undefined
会导致意想不到的结果。 幸运的是,目前的ECMA 5兼容的浏览器不允许分配到undefined
(和将扔在严格模式除外)。
我喜欢typeof someVar === "undefined"
,为您发布,或someVar in window
为Susei建议。
if (typeof someVar === "undefined") { var someVar = "hi!"; }
将检查someVar
(局部或全局)是不确定的。
如果你想检查一个全局变量,你可以使用
if(window['someVar'] === undefined) {
...
}
假设这是在浏览器:)
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".
这将是执行检查的简单方法。
但是,如果这个检查将失败variableName
声明并分配与boolean value: false
if(window.variableName){
}