【问题标题】:Other ways to increment a variable in JavaScript [duplicate]在 JavaScript 中增加变量的其他方法 [重复]
【发布时间】:2011-09-29 11:24:25
【问题描述】:

可能重复:
Why avoid increment (“++”) and decrement (“--”) operators in JavaScript?

我是 Douglas Crockford 和他的优秀著作 JavaScript: The Good Parts 的忠实粉丝。在将任何代码签入到我们的存储库之前,我还会每小时使用他的 JSLint 工具,这很有意义。

通过 JSLint 运行代码时我注意到的一件事是它坚持认为 ++ 自增运算符在某种程度上是邪恶的。我知道我可以关闭某些规则,但那是作弊;)。 Crockford 在 JS: TGP 的第 112 页提到了他不喜欢...

在我自己的实践中,我观察到当我使用 ++ 和 -- 时,我的代码往往过于紧凑、过于棘手、过于神秘。所以,作为纪律问题,我不再使用它们了。我认为因此,我的编码风格变得更加简洁。

这一切都很可爱,但他没有给出他现在编码方式的任何例子。我假设他正在做类似的事情......

var i;
i = 0;
i = i + 1;

再次,很好,但我的 JS 代码中有一些基本的“for 循环”,我想很多人都有,而且我一直使用标准语法...

for (i = 0; i < myArray.length; i++) { 
    // Loop Stuff 
}

我错过了什么吗?递增/递减的最干净和/或最佳方式是什么?

【问题讨论】:

  • FWIW,i += 1 也是一个选项...
  • @gnur - 你是对的;我很抱歉。我在发帖前搜索时错过了那个。请酌情删除。
  • 我想我在 JS 中没有找到 += 运算符。或者我错过了什么。
  • 我更喜欢 i++ 而不是 i+=1,因为它在循环中更惯用。

标签: javascript


【解决方案1】:

我认为这是相当有争议的,我个人坚持循环使用i++。当然,您可以在循环语句中将其替换为 i = i + 1,以完全符合 JSLint。

在 JavaScript 中并没有真正的替代方法来增加和减少数值。您可以经常使用Array.forEach() 和/或Object.keys() 来防止数字索引。

【讨论】:

    【解决方案2】:

    在 C/C++ 中,这很重要,尤其是对于任意迭代器和前/后增量语义。此外,随机访问与前向迭代器。

    在 Javascript 中,它更多的是关于美学而不是其他任何东西。除非你正在处理字符串。 "1"+1 是“11”。

    我会说 ++i 是一个值得保持一致的习语。

    JSLint 错误。

    【讨论】:

      【解决方案3】:

      通过 JSLint 我现在总是这样做:

      for (var i = 0; i < myArray.length; i+=1) { 
          // Loop Stuff 
      }
      

      【讨论】:

        【解决方案4】:

        就我个人而言,我认为用于递增和递减的 ++/-- 运算符没有任何问题。虽然像 i = i + 1; 这样的东西对于新的编码人员来说可能更容易,但一旦你知道操作员代表什么,这种做法就不是火箭科学了。

        【讨论】:

          【解决方案5】:

          关于循环,一个原始的想法可以是使用这样的循环来避免各种数字:

          var a = [];
          for (var i in "     ")
              a.push("Loop iteration here");
          alert(a.join("\n"));
          

          意思是对一个字符串进行迭代,迭代次数将等于字符串长度 - 在上面的示例中为 5。

          现场测试用例:http://jsfiddle.net/vTFDP/

          【讨论】:

          • 最初的想法:是的,更具可读性:地狱不,想象一下当你开始时试图理解..
          • 同意@gnur - 非常有创意,但我看不出在工作中通过了我们的任何代码审查!
          • @gnur 毫无疑问,i++ 是最易读也可能是最高效的。但由于有些人有奇怪的突发奇想,我的想法是有目的的 - 奇怪的突发奇想的诡计。
          【解决方案6】:

          我在自动增量/减量运算符中看到的唯一棘手的事情(我很惊讶这里没有人指出这一点)是前缀 (++i) 和后缀 (i++) 版本之间的区别。我也相信自动增量/减量运算符通常更有效。除此之外,我认为选择主要基于美学,尤其是在javascript中。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2021-07-27
            • 2020-09-18
            • 1970-01-01
            • 1970-01-01
            • 2013-08-13
            • 1970-01-01
            • 2019-07-16
            相关资源
            最近更新 更多