2011-07-06 58 views
9

可能重复:
Why avoid increment (“++”) and decrement (“--”) operators in JavaScript?其他方式来增加一个变量在JavaScript

我道格拉斯Crockford的和他的优秀著作,JavaScript: The Good Parts的忠实粉丝。我也在每小时使用他的JSLint工具,然后检查任何代码到我们的仓库,这是很有道理的。

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

在我自己的实践中,我发现,当我用++和 - ,我的代码往往是太紧张,太狡猾,太神秘。所以,作为一个纪律问题,我不再使用它们。因此,我认为我的编码风格变得更加清洁。

这一切都非常可爱,但他现在没有给出任何他编码方式的例子。我认为他做这样的事情......

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

同样,伟大的,但我有几个基本的“for循环”在我的JS代码,我想很多人都和我一直使用标准语法...

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

我是否错过了什么?什么是增量/减量最干净和/或最好的方式?

+4

FWIW,'i + = 1'也是一个选项... –

+0

@gnur - 你是对的;我很抱歉。当我在发布之前搜索时,我错过了那一个。请酌情删除。 –

+0

我不认为我在JS中发现'+ ='操作符。或者我错过了一些东西。 –

回答

13

我认为这是比较有争议的,我个人坚持i++循环。对于源代码,您可以在循环语句中将其替换为i = i + 1,以完全符合JSLint。

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

0

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

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

我会说,++我是一个值得一致的成语。

JSLint是错误的。

3

传递的JSLint我现在总是这样:

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

就个人而言,我认为没有错与++/- 运营商增加和减少。虽然像i = i + 1;这样的东西对新编码员来说可能更容易一些,但是一旦你知道运营商代表什么,这种做法就不是火箭科学。

0

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

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

含义迭代一个串,将有等于串长度迭代量 - 在5上面的例子。

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

+0

原创构思:是的, 更具可读性:地狱不,想象试图理解当你开始时...... – gnur

+0

同意@gnur - 非常有创意,但我看不到通过我们的任何代码评论工作! –

+0

@gnur毫无疑问'i ++'是最可读性最高的。但是,正如有些人有怪异的想法,我的想法服务于这个目的 - 奇怪的怪异技巧。 –

4

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