0

我正在使用一个有点非传统的 for 循环,它适用于我正在做的事情,如下所述(不费心显示变量声明):

if (arr && arr.length > 0) {
    for (i = arr.length; i--; i) {
        element = arr.pop();
        //rest of code
    }
}

闭包编译器给我一个警告:“警告 - 可疑代码。这段代码没有副作用,有错误吗?” 专门指向 for 循环括号中的最后一个“i”。

如果我删除 i,jslint 会引发警告,如果我离开它,则关闭会引发警告。总共有三个这样的循环,是否有“关闭友好”的方式来做到这一点?

4

4 回答 4

3

正常方式怎么样?

if (arr && arr.length > 0) {
    for (i = arr.length; i > 0; --i) {
        element = arr.pop();
        //rest of code
    }
}

将减量放入测试中并不是编写for循环的正常方法。

或者更正常:

if (arr && arr.length > 0) {
    for (i = arr.length - 1; i >= 0; --i) {
        element = arr.pop();
        //rest of code
    }
}

...但是由于您不使用i,所以这并不重要。

或者你可以使用while

if (arr && arr.length > 0) {
    i = arr.length;
    while (i--) {
        element = arr.pop();
        //rest of code
    }
}
于 2012-05-25T21:16:31.667 回答
1

对于未来的读者,如果您要减少数组的长度,请不要使用for循环,请使用while

if (arr) {
    while (arr.length) {
        element = arr.pop();
        ...
    }
}
于 2016-09-29T01:39:51.363 回答
0

是的——这样的事情应该可以解决问题:

for (i = arr.length; i > 0; i--) {
于 2012-05-25T21:17:29.123 回答
0

使用 jshint 而不是 jslint 并关闭警告。

于 2012-05-27T21:11:58.377 回答