【问题标题】:jsLint for loop declarationjsLint for 循环声明
【发布时间】:2015-10-24 14:50:32
【问题描述】:

根据 jsLint 建议以如下方式声明 for 循环:

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

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

任何帮助将不胜感激!

【问题讨论】:

  • 没有区别。
  • JSLint 是在哪里说的?
  • Douglas Crawford 讨厌 ++——这就是为什么 jslint 会告诉你在代码中使用额外的字符——说真的,在这种情况下不使用 ++ 的唯一原因是 Douglas Crawford 说不要!
  • JSLint 真的很奇怪。考虑尝试像 JSHint 这样的替代方案。
  • 在this question 中得到了奇怪的回答(不是答案,而是问题本身)

标签: javascript jslint


【解决方案1】:

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

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

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

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

【讨论】:

    【解决方案2】:

    绝对没有区别。但是如果你使用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 的索引。

    【讨论】:

    • 一些不好的建议(使用++,因为它可以节省一个字符;arr[i++]),以及一些好的建议(使用forEach)。
    • 这不取决于您使用i 和e 的目的吗?为什么不保存一个字节?
    猜你喜欢
    • 2012-09-27
    • 2013-10-28
    • 2015-08-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多