2011-12-29 181 views
3

在閱讀Douglas Crockford的「JavaScript:The Good Parts」和Stoyan Stevanov的「JavaScript模式」之後,我試圖確定究竟是什麼「過度的技巧」。他們都表示在代碼中使用++--時會發生這種情況,但無法在SO中或通過Google搜索找到該術語的確切定義。有任何想法嗎?什麼是「過度技巧」?

+6

這裏是一個相當長的討論鏈接:http://stackoverflow.com/questions/971312/why-avoid-increment-and-decrement-operators-in-javascript – Jonathan 2011-12-29 11:25:52

+0

有很多偉大的答案在這裏,我得到它現在。感謝大家的幫助! – kaidez 2012-01-02 10:47:47

回答

5

您可以從克羅克福德自己在這裏聽到它:http://www.youtube.com/watch?feature=player_detailpage&v=47Ceot8yqeI#t=4140s

簡單的答案是,++--行爲上的變量,通常在同一時間做它,你正在做一些別的變量。例如,你可以快速決定這是什麼嗎?

y += x++ + ++y; // what is y now? 

更多的StackOverflow討論:Why avoid increment ("++") and decrement ("--") operators in JavaScript?

+1

我不瞭解你,但我可以立即告訴你,這節省了索引1處的代碼。我在80%的時間內使用Python,該語言甚至不* *後/前增加/減少。 JS開發人員無法記住這些運營商的簡單意義嗎?不是*複雜表達式*中的副作用不會造成混淆。但你的例子似乎對我來說相當有趣。很多C和C++開發人員似乎都和這些操作員相處得很好,儘管在C和C++中使用它們會更加困難,因爲潛在的未定義行爲。 – delnan 2011-12-29 11:35:31

+0

對不起,這是一個人爲的例子。 'y + = x ++ + ++ y'怎麼樣? – Interrobang 2011-12-29 11:39:31

+0

這確實很棘手,我建議你使用它。請注意,前面提到的C和C++開發人員會同意這種看法(部分原因是它們的語言中存在未定義的行爲)。 – delnan 2011-12-29 11:42:27

1

這是關於內置的小技巧。例如,avar++avar = avar + 1的別名。

JavaScript充滿了運算符和其他讓編程更容易的事情,但它們只是一些技巧。這可能是他的意思。

另外,喬納森指出:Why avoid increment ("++") and decrement ("--") operators in JavaScript?

+0

...除了'var'是一個保留字。 ;-) – PPvG 2011-12-29 11:29:45

+0

Nitpicking ... ;-) – 2011-12-29 11:30:23

+1

在表達式上下文中,avar ++不是** avar = avar = avar + 1的別名。 '++ avar'是。預增量會更改變量的值,但會評估爲以前的值。也許Crockford *是*正確的... – delnan 2011-12-29 11:44:11

0

過度trickiness是主觀的。因此,它沒有明確的定義。

有人會說C着名的字符串複製代碼(while (*p++ = *q++);)過於棘手,有人會說它不是。