0

对于此代码:

var i = 0;
for (i < menuitem.length; i += 1;)

JSlint 返回:

需要一个条件表达式,而是看到一个赋值。

需要一个标识符,而是看到“)”。

并拒绝继续扫描。此代码工作正常,但有什么问题?我怎么能用“if”语句来写这个?(如果这就是 jslint 的意思)。

谢谢你们的帮助!

4

5 回答 5

2

是的,JSLint 非常恶毒。正如其他人指出的那样,您没有在正确的位置填写内容,但除此之外,JSLint 要求您for循环的初始化部分中添加一些内容。不过,有几个选项可以让它在不影响逻辑的情况下发挥得很好。我最喜欢的是重置i(即使它已经设置):

var i = 0;
for (i = 0; i < menuitem.length; i += 1) {
    /** do stuff **/
}

这让 JSLint 很高兴,并且还确保i如果您决定将它用于for同一词法范围内的另一个循环,它会被重置。另一种选择是在null其中扔 a 以填充空间(如果您不想重置 的值i):

var i = 0;
for (null; i < menuitem.length; i += 1) {
    /** do stuff **/
}

两者都可以正常工作并安抚令人担忧的 JSLint。但是,没有人会真正关心您是否将初始化部分留空(除了 JSLint)。您可以尝试 JSHint,因为它对这类事情更加宽容。

于 2012-09-10T02:23:07.133 回答
1

你的for循环有点奇怪,第二部分应该是循环的条件,而不是你有一个分配。

您必须始终整理好零件(initialisation; condition; step)

var i = 0;
for (; i < menuitem.length; i += 1)

我只是将您的分号从末尾移到开头。或者,如果您愿意,您可以将变量声明和赋值放在第一部分中。

于 2012-09-10T02:09:34.277 回答
0
for (var i = 0; i < menuitem.length; i += 1) {
  // code
}

或者

var i = 0;

for (; i < menuitem.length; i += 1) {
  // code
}
于 2012-09-10T02:10:18.310 回答
0

从您的代码片段中,我将假设 i 只是一个用于控制循环周期数的变量。正确的代码是

for (var i = 0; i < menuitem.length; i += 1) {
// code
}

那是标准化的声明和语法——至少对于我现在能想到的语言来说。这就是这种循环的真正意义——for循环是这样设计的,所以作者可以简单地编写一行代码,而不是如果他/她想做一个while循环的话。

于 2012-09-10T02:17:06.790 回答
0

找到了!以下是验证的准确答案:

var i;
for (i = 0; i < menuitem.length; i += 1) {
  // code
}

var 应该在外面说 jslint :s

于 2012-09-10T02:18:23.240 回答