在定义之前使用'变量'

时间:2010-02-10 07:50:33

标签: javascript jslint

我正在检查是否定义了变量,如果没有明确定义,我将通过执行以下操作来定义它:

if ( typeof(aVariable) == 'undefined' ) {
  var aVariable = value;
}

因为没有定义变量,JSLint会在它定义之前警告它被使用,这正是我想要的。

我怎样才能克服这个?

我希望能够明确地定义这些变量:

<script>
  var aVariable = value;
</script>
<script src="myScript.js"></script>

所以每个要包含此脚本的人都可以自定义一些属性。而且我担心我无法改变这种逻辑,因为它已经以这种方式被用于数百个网站。

向下滚动查找答案/解决方案,因为我已经回答了我自己的问题Stack Overflow没有显示出来。千万不要错过。

6 个答案:

答案 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带上一粒盐。你在这里做的是非常有效的,也是避免意外使用未定义变量的好习惯。