2012-07-19 35 views
20

所以我使用的是JavaScript的簡寫if/else聲明(我讀的地方,他們是所謂三元報表?)if語句JavaScript的簡寫,而其他部分

this.dragHandle.hasClass('handle-low') ? direction = "left" : direction = "right"

這個偉大的工程,但如果稍後我想只使用簡寫if,而沒有else部分。像:

direction == "right" ? slideOffset += $(".range-slide").width()

這是可能的呢?

+3

這些片段的技術術語是_conditional expressions_,它使用條件operator_'?:'。因爲這個操作符有三個操作數,所以它被稱爲三元操作符。 – 2012-07-19 05:36:36

+2

快2倍 http://jsperf.com/speed-test-for-conditions – 2013-07-04 21:48:04

回答

32

可以使用&&運營商 - 第二個操作數的表達只有在第一次執行是在我看來,真正的

direction == "right" && slideOffset += $(".range-slide").width() 

if(conditon) expressioncondition && expression

+0

可能會堅持'if(條件)表達式' - 但很好知道'&&'操作符在這種情況下工作! – ahren 2012-07-19 08:11:34

+1

look'&&'對我來說更快http://jsperf.com/speed-test-for-conditions – 2013-07-04 21:46:29

+0

我在雙引號之前使用過並且工作過......類似於>>> direction ==「right」? slideOffset + = $(「。range-slide」)。width():「」....這樣做會產生什麼問題嗎? – hsobhy 2016-04-26 00:14:13

2

不,這是不可能的,因爲三元操作符需要三個操作數。

first-operand ? second-operand (if first evaluates to true) : third-operand (if false) 
2

你有什麼將不會工作,但爲什麼不只是使用一行if語句代替。

if(direction == "right") slideOffset += $(".range-slide").width();

這涉及比雷建議的方法少打字。當然,如果你真的想堅持這種格式,他的回答是有效的。

0

這並不完全回答你的問題,但ternaries允許你寫不到你已經證明:

direction = this.dragHandle.hasClass('handle-low') ? "left" : "right"; 

而現在,我想想,是啊,你可以做你的問題太:

slideOffset + direction == "right" ? = $(".range-slide").width() : = 0; 

這是一個理論。下一次,我有機會+=三元我會試試這個。讓我知道它是如何工作的!

+0

有趣的是,這可能工作。我開始不喜歡這個網站 – Dale 2012-07-19 06:51:34

+0

頂部線絕對工作 – Dale 2012-07-19 06:52:02

9

不要以爲它像一個控制更具可讀性塊(即:一個if-else或一個開關)。 它並不是真正意義上的內部運行代碼。

您可以。它變得非常難看,速度非常快,這打破了目的。

你真正想要使用它的是指定值

以你最初的例子,並把它發揮得淋漓盡致一點,你會得到:

direction = (this.dragHandle.hasClass("handle-low")) ? "left" : "right"; 

見。現在我所做的是我已經採取了一些需要一個if/else或開關的東西,而這些開關已經被用來分配給那個值,並且我已經把它清理得很漂亮。

你甚至可以做一個別人,如果三元類型:

y = (x === 2) ? 1 : (x === 3) ? 2 : (x === 4) ? 7 : 1000; 

你也可以用它來觸發代碼,如果你願意,但一段時間後變得非常困難,要知道什麼是去哪裏(看前面的例子,看看如何分配可以開始看起來怪異一眼)...

((this.dragHandle.hasClass("...")) ? fireMe(something) : noMe(somethingElse)); 

...這通常會工作。

但它並不比任何if或分支立即調用函數(以及非JS程序員,或未經訓練的JS程序員試圖維護您的代碼時自嘲)更加漂亮或者更有用。

+1

「_untrained JS程序員會試圖維護自己的代碼,自己會自殺」我無法說得更好 – ajax333221 2012-07-19 06:27:40

2

條件運算符是而不是這是if語句的簡寫。這是一個運營商,而不是一個聲明。

如果您使用它,您應該將其用作操作員,而不是作爲聲明。

只需使用一個零值,第三個操作數:

slideOffset += direction == "right" ? $(".range-slide").width() : 0; 
0

我有,我想只能調用if部分類似的情況。通過使用邏輯& &(和)運算符實現。

var name = "michael"; 

var doSomething = function() { 
    return (name === "michael") && console.log("name is valid"); 
}; 

doSomething(); // will log name is valid else returns undefined but is disposed of since we never store it.