JSHint/JSLint 中的所有错误意味着你没有声明你的 key/iterator variable。正如@Christopher 所建议的那样,JSLint 希望您在其范围的顶部声明它(谷歌JavaScript hoisting
了解更多关于提升的信息,如这个链接):
/*global data, identifier, DIVsuggestions */
// We'll pretend all of the above were passed in from a function's parameters
// by using JSLint's "global" keyword -- now you can paste this code into
// jslint.com and have it pass muster.
// make array
var sugested_sports = data.split(","),
sporty_items = '', // pre build DIV
sport; // <<<< **** DECLARE YOUR "KEY" HERE ****
for (sport in sugested_sports)
{
if (sugested_sports.hasOwnProperty(sport)) {
sporty_items += '<a href="#'+identifier[1]+'">'
+sugested_sports[sport]+'</a>';
}
}
// insert DIV
DIVsuggestions.html(sporty_items);
此处的此bad for in variable
错误减少到与其他地方的错误相同'sport' was used before it was defined
。
编辑:值得一提的是,如果你for
在一个内部函数中,你需要for in
在相同的上下文中声明你的变量。如果您for in
在父上下文中声明,JSLint 会抱怨。
例子:
function spam(d)
{
var fnTest, row; // `row` is defined "too early"
fnTest = function (data) {
for (row in data)
{
if (data.hasOwnProperty(row))
{
console.log(data.row);
}
}
};
fnTest(d);
}
为了让事情变得快乐,row
进入内部功能。尽管它在技术上仍在范围内,但 JSLint 不喜欢之前使用的“超级范围”。
function spam(d)
{
var fnTest;
fnTest = function (data) {
var row; // and JSLint is happy! ;^D
for (row in data)
{
if (data.hasOwnProperty(row))
{
console.log(data.row);
}
}
};
fnTest(d);
}
顺便说一句,詹姆斯的担忧已被
hasOwnProperty
OP 插入的支票所涵盖。取出该检查,JSLint 会抱怨,“for in 的主体应该包含在 if 语句中,以从原型中过滤掉不需要的属性”。
如果您有兴趣,这里有更多关于 hasOwnProperty 和 for... in 的内容。