2014-08-28 60 views
0

如果我能看到這些if/else語句寫得很長,這個輪播如何工作會變得更容易理解。據我瞭解,如果/其他速記雲:快速翻譯JS if/else速記?

isThisTrue? thenDoThis: ifNotDoThis

但我有點迷茫的時候得到補充更多的條件語句。任何幫助將非常感激。

n.attr("id")=="right"?currentIndex==$("#slider li").size()-1?currentIndex=0:currentIndex++:n.attr("id")=="left"?currentIndex==0?currentIndex=$("#slider li").size()-1:currentIndex--:currentIndex=n.attr("data-position");

SetTheme:function(n){n.hasClass("dark")?($("#logo").addClass("dark"),$("#ips").addClass("dark"),$("#nav").addClass("dark"), $("#but-links").addClass("dark"),$("#but-search").addClass("dark")):n.hasClass("light")&&($("#logo").removeClass("dark"),$("#ips").removeClass("dark"), $("#nav").removeClass("dark"), $("#but-links").removeClass("dark"), $("#but-search").removeClass("dark"))}

+1

這是可怕的代碼..更復雜的閱讀肯定並不意味着更好的節目。尋找問號和冒號來識別if和else塊。 – hamobi 2014-08-28 17:26:44

+2

看起來像縮小的代碼。至少我希望有人不會故意寫這些。 – Brandon 2014-08-28 17:28:44

回答

4

不管你做什麼,不寫這樣的代碼,如果你發現這樣寫的代碼,解決它。你很困惑,因爲它很混亂。不是你。 :-)

但是規則是,條件運算符的操作數是貪婪,從左到右。讓我們重溫一下三個操作數的條件運算符(如你在你的問題做了):

operand1 ? operand2 : operand3 

如此以來,操作數是貪婪的,這意味着,例如:

val = true ? true ? "a" : "b" : "c"; // is "a" 
val = false ? true ? "a" : "b" : "c"; // is "c" 
//  ^^^^^^^^^^^^^^^^^ 
//   | \   /
//   | \   /
//   | +----------+--- this is operand2 to... 
//   +------------------ this conditional operator 

...因爲他們相當於

val = true ? (true ? "a" : "b") : ("c"); // is "a" 
val = false ? (true ? "a" : "b") : ("c"); // is "c" 
+0

這說明了這一點,謝謝。如果我可以再問一個問題:如果'n.hasClass(「dark」)?'那麼它會將類名添加到一堆東西,但是如果使用n.hasClass(「light」)'使用&&操作符並從一堆東西中移除黑暗的類。程序員不能用&替換&&嗎?並取得了相同的結果? – user2658433 2014-08-28 20:17:07

+0

@ user2658433:如果他們用'?'**替換'&&',他們可能獲得了類似的結果**並且**添加了一個':',其中沒有任何內容。 'x && y();'是另一個難以理解的JavaScript語言(在我看來)幾乎在所有情況下都應該避免。它所做的基本上是'x? y():/*...什麼都不是...... * /;'*(請告訴我這是縮小/編譯的代碼,而不是某人真正寫的東西,這是對條件和逗號運算符的嚴重濫用)* – 2014-08-28 21:04:58

+0

在我按下輸入一堆次之前,使其在不同的文件中可讀,這是一個JavaScript文件,看起來縮小/壓縮。這個文件如何濫用條件和逗號運算符? (它是過度使用還是濫用?) – user2658433 2014-08-28 21:40:44