我正在检查是否定义了变量,如果没有明确定义,我将通过执行以下操作来定义它:
if ( typeof(aVariable) == 'undefined' ) {
var aVariable = value;
}
因为没有定义变量,JSLint会在它定义之前警告它被使用,这正是我想要的。
我怎样才能克服这个?
我希望能够明确地定义这些变量:
<script>
var aVariable = value;
</script>
<script src="myScript.js"></script>
所以每个要包含此脚本的人都可以自定义一些属性。而且我担心我无法改变这种逻辑,因为它已经以这种方式被用于数百个网站。
向下滚动查找答案/解决方案,因为我已经回答了我自己的问题Stack Overflow没有显示出来。千万不要错过。
答案 0 :(得分:7)
我认为JSLint告诉你的是你不应该在定义之前使用变量。如果您对自己的情况感到满意,可以忽略该警告。如果您不完全确定,请考虑一下为什么还没有定义此变量。
例如,您是否真的想测试aVariable是否具有值集,而不是是否定义了值?
var aVariable = null;
......(稍后)
if (aVariable == null) {
aVariable = value;
}
答案 1 :(得分:5)
我在JSLint邮件列表中找到了更多可接受的答案,抱歉Boldewyn:)
解决方案1
在IE中,在脚本级别(即每个文件或每个脚本块),如果它看到了 在解析阶段(执行前),“var”声明,它将重置 该变量的值已经存在。
这样做会更好:
/*global foo: true */
if (typeof foo === "undefined") {
foo = "some value";
}
通过不声明“var”并简单地指定foo,foo将自动获取 全球范围。
解决方案2(特殊情况)
如果显式设置变量不为零或为假
var foo = foo || "some value";
答案 2 :(得分:4)
你可以使变量(无论如何都是全局的)成为window
的明确成员:
window.aVariable = 'default';
以后
if (! ('aVariable' in window)) {
window.aVariable = 'new value';
}
如果您不想或不能更改代码,那么我建议务实的ansatz并忽略JSLint的抱怨,因为您的代码仍然可以工作(也就是说,只要您不启用ECMAScript 5的严格模式...)。
答案 3 :(得分:2)
试试这个:
aVariable = null;
aVariable = typeof(aVariable) == 'undefined' ? null : value;
答案 4 :(得分:1)
在使用变量之前,最容易声明变量:
var aVariable;
这将使用“undefined”类型进行初始化,因此未定义的测试仍然有效:
if (typeof aVariable == "undefined") {
aVariable = value;
}
答案 5 :(得分:-1)
当您使用驼峰套管作为变量名时,似乎会触发该错误。如果您使用大写字母(变量)启动变量或将其全部设置为小写(变量),则只会出现“隐含的全局”错误。
我不确定它是什么建议通过对变量名强制使用套接字,尽管你总是要把JSLint带上一粒盐。你在这里做的是非常有效的,也是避免意外使用未定义变量的好习惯。