2011-07-06 57 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中。