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
,因为数组实例方法如 forEach
和 map
应该是首选(显然有一个标记以在必要时将其关闭)。
此建议和其他建议在 JSLint instructions 中进行了解释。
根据 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
,因为数组实例方法如 forEach
和 map
应该是首选(显然有一个标记以在必要时将其关闭)。
此建议和其他建议在 JSLint instructions 中进行了解释。