不要以爲它像一個控制更具可讀性塊(即:一個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程序員試圖維護您的代碼時自嘲)更加漂亮或者更有用。
這些片段的技術術語是_conditional expressions_,它使用條件operator_'?:'。因爲這個操作符有三個操作數,所以它被稱爲三元操作符。 – 2012-07-19 05:36:36
快2倍 http://jsperf.com/speed-test-for-conditions – 2013-07-04 21:48:04