JSLint错误报告 - 这有什么问题?

Han*_*ans 14 javascript jslint

我收到了这个错误,不知道原因是什么.任何的想法?

第2127行的问题18:在变量'sport'中不好.for(sport in sugested_sports)

                // make array
        var sugested_sports = data.split(",");

            // pre build DIV
        var sporty_items = '';
        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);
Run Code Online (Sandbox Code Playgroud)

多谢.

Poi*_*nty 19

尝试

var sport;
for (sport in sugested_sports)
Run Code Online (Sandbox Code Playgroud)

这将处理缺少的变量声明并将其置于for循环之外(请参阅jsLint错误"无法设置属性'优先'未定义").

  • 在此声明var将导致另一个jslint错误.Vars应根据jslint(即全局或函数范围)声明在范围的顶部. (6认同)
  • 如果你注意JSLint那是真的.如果你不这样做,那没关系. (4认同)

Jam*_*ory 17

Pointy的答案可能是lint抱怨的答案.


但是作为一般规则,使用时应该小心for (... in ...).人们常常将此构造与foreachC#或其他语言中的其他类似概念混淆,而实际上它与之无关.javascript for in构造迭代对象的每个成员 - 而不仅仅是集合中的值 - 包括方法和属性.如果您事先不知道它是如何工作的,这种行为通常会导致意外的副作用.

例如:

x = ['one', 'two'];
for (var value in x) {
  alert(value);
}
Run Code Online (Sandbox Code Playgroud)

这产生了两个警报,第一个0是第二个1,第二个是警报,特别是集合的索引.

如果我们改变一点:

x = ['one', 'two'];
x.method = function() {};
for (var value in x) {
  alert(value);
}
Run Code Online (Sandbox Code Playgroud)

我们最终有三个警报这个时候,0,1,和method.这是我所指的意外行为.in如果你知道它做了什么就可以使用它,但我已经看到它不止一次吸引人们.

以下两个示例均适用:

x = ['one', 'two'];
for (var i = 0; i < x.length; i++) {
  alert(i);
}
Run Code Online (Sandbox Code Playgroud)