可能重复:
Why avoid increment (“++”) and decrement (“--”) operators in JavaScript?
我是道格拉斯·克罗克福德及其优秀着作JavaScript: The Good Parts的忠实粉丝。我还在每小时使用他的JSLint工具,然后检查我们的存储库中的任何代码,这是很有道理的。
我在通过JSLint运行代码时注意到的一件事是它坚持认为++增量运算符在某种程度上是邪恶的。我知道我可以取消某些规则,但这是作弊行为;)。 Crockford在JS的第112页提到他不喜欢:TGP ......
在我自己的实践中,我观察到当我使用++和 - 时,我的代码往往太紧,太棘手,太神秘。所以,作为纪律问题,我不再使用它们了。我认为结果是,我的编码风格变得更加清晰。
这一切都非常可爱,但他没有提供他现在编码方式的任何例子。我假设他正在做类似......
var i;
i = 0;
i = i + 1;
再次,很好,但我的JS代码中有一些基本的“for循环”,正如我想象的那样,我总是使用标准语法......
for (i = 0; i < myArray.length; i++) {
// Loop Stuff
}
我错过了什么吗?什么是最简洁和/或最好的增量/减量方法?
答案 0 :(得分:14)
我认为这是相当有争议的,我个人坚持i++
循环。在cource中,您可以在循环语句中将其替换为i = i + 1
,以完全符合JSLint。
在JavaScript中增加和减少数值没有真正的替代方法。您通常可以使用Array.forEach()
和/或Object.keys()
来阻止数字索引。
答案 1 :(得分:4)
我在autoincrement / decrement运算符中看到的唯一棘手的事情(我很惊讶,这里没有人指出这一点)是前缀(++ i)和后缀(i ++)版本之间的区别。我也相信自动增量/减量运算符通常会稍微提高效率。除此之外,我认为选择主要基于美学,特别是在javascript中。
答案 2 :(得分:3)
传递JSLint我现在总是这样做:
for (var i = 0; i < myArray.length; i+=1) {
// Loop Stuff
}
答案 3 :(得分:0)
在C / C ++中,这很重要,特别是对于任意迭代器和前/后增量语义。此外,随机访问与前向迭代器。
在Javascript中,它更多地是关于美学而不是其他任何东西。除非你正在处理字符串。 "1"+1
是“11”。
我会说++我是一个值得与之相符的习语。
JSLint错了。
答案 4 :(得分:0)
就个人而言,我认为++ / - 运算符没有增加和减少的错误。虽然i = i + 1;
之类的东西对于新编码员来说可能更容易,但一旦你知道操作员的意思,这种做法就不是火箭科学。
答案 5 :(得分:0)
关于循环,一个原创的想法可以使用这样的循环来避免各种数字:
var a = [];
for (var i in " ")
a.push("Loop iteration here");
alert(a.join("\n"));
迭代遍历字符串,迭代次数将等于字符串长度 - 在上例中为5。
实时测试案例:http://jsfiddle.net/vTFDP/