jsLint for 循环声明

jsLint for loop declaration

根据 jsLint,推荐使用以下方式声明 for 循环:

for(var i = 0, length = data.length; i < length; i+=1){...}

在这种情况下,i++i+=1 有什么区别?

任何帮助将不胜感激!

完全没有区别。但是如果你使用 i++ 你会节省一个字节。如果您跳过声明 length,您将节省更多。

所以..我不明白你为什么要那样使用它。这是我一贯的做法:

for (var i = 0; i < arr.length; i++) {
    ...
}

关于此处节省字节的主题,如果您的循环如下所示:

for (var i = 0; i < arr.length; i++) {
    var e = arr[i];
}

您也可以这样做:

for (var i = 0; i < arr.length;) {
    var e = arr[i++];
}

您也可以这样做:

arr.forEach(function(e) {
    // ...
});

假设您不需要使用 e 的索引。

在此上下文中没有功能差异。但是,++-- 可能会导致代码复杂化并导致差一错误(前增量和后增量混淆),从而成为错误的来源。因此 JSLint 建议不要使用这种结构。

JSLint 并没有告诉您您的代码在功能上是错误的,而是指出还有另一种编写代码的方法可以避免常见的陷阱。

事实上,最新版本的 JSLint 将完全不建议使用 for,因为数组实例方法如 forEachmap 应该是首选(显然有一个标记以在必要时将其关闭)。

此建议和其他建议在 JSLint instructions 中进行了解释。