3 回答

TA貢獻1875條經(jīng)驗 獲得超5個贊
呵呵,您的問題中有一些令人興奮的三元語法用法;我最喜歡最后一個...
x = (1 < 2) ? true : false;
這里完全不需要使用三進制-您可以簡單地編寫
x = (1 < 2);
同樣,三元語句的條件元素始終被評估為布爾值,因此您可以表示:
(IsChecked == true) ? removeItem($this) : addItem($this);
簡單如下:
(IsChecked) ? removeItem($this) : addItem($this);
實際上,我也將刪除該IsChecked臨時文件,使您擁有:
($this.hasClass("IsChecked")) ? removeItem($this) : addItem($this);
至于這是可以接受的語法,那肯定是!這是在不影響可讀性的情況下將四行代碼簡化為一行的好方法。我唯一要提的建議是避免在同一行上嵌套多個三元語句(這就是瘋狂?。?/p>

TA貢獻1829條經(jīng)驗 獲得超6個贊
三元樣式通常用于節(jié)省空間。從語義上講,它們是相同的。我更喜歡使用完整的if / then / else語法,因為我不喜歡犧牲可讀性-我是老派,而且我更喜歡用花括號。
完整的if / then / else格式幾乎用于所有內(nèi)容。如果您在每個分支中進入較大的代碼塊,具有多分支的if / else樹或長字符串中包含多個else / if,則它特別受歡迎。
三元運算符,當你分配一個值基于一個簡單的條件變量或與您非常簡短的結果進行多次的決定是常見的。您引用的示例實際上是沒有意義的,因為表達式將在沒有任何額外邏輯的情況下求值為兩個值之一。
好主意:
this > that ? alert(this) : alert(that); //nice and short, little loss of meaning
if(expression) //longer blocks but organized and can be grasped by humans
{
//35 lines of code here
}
else if (something_else)
{
//40 more lines here
}
else if (another_one) /etc, etc
{
...
不太好:
this > that ? testFucntion() ? thirdFunction() ? imlost() : whathappuh() : lostinsyntax() : thisisprobablybrokennow() ? //I'm lost in my own (awful) example by now.
//Not complete... or for average humans to read.
if(this != that) //Ternary would be done by now
{
x = this;
}
else
}
x = this + 2;
}
一條非常基本的經(jīng)驗法則-您能一口氣理解整個事情還是更好?三元還可以。否則,將其展開。

TA貢獻2019條經(jīng)驗 獲得超9個贊
您發(fā)布的示例沒有特別棘手的地方。
在三元運算符中,將評估第一個參數(shù)(條件條件),如果結果為true,則評估并返回第二個參數(shù),否則,將評估并返回第三個參數(shù)。這些參數(shù)中的每一個都可以是任何有效的代碼塊,包括函數(shù)調(diào)用。
這樣想:
var x = (1 < 2) ? true : false;
也可以寫成:
var x = (1 < 2) ? getTrueValue() : getFalseValue();
這是完全有效的,并且這些函數(shù)可以包含任何任意代碼,無論它是否與返回值相關。此外,三元運算的結果不必分配給任何東西,就像函數(shù)結果不必分配給任何東西一樣:
(1 < 2) ? getTrueValue() : getFalseValue();
現(xiàn)在,只需將它們替換為任意函數(shù),就可以看到與示例類似的東西:
(1 < 2) ? removeItem($this) : addItem($this);
現(xiàn)在,您的最后一個示例實際上根本不需要三進制,因為可以這樣編寫:
x = (1 < 2); // x will be set to "true"
添加回答
舉報