2012-02-21 93 views
1

這有什麼錯用使用的地方在Javascript較長條件語句三元運營商,例如:三元運營商短條件語句

(variable == "dog") ? dog_stuff() : false; 

不是

if (variable == "dog") 
{ 
    dog_stuff(); 
} 

這聽起來像一個愚蠢的問題,但我發現它非常快速和容易閱讀,我只是不想使用它,如果有可能的缺點?

+0

有注意使用三元運算符錯誤 – 2012-02-21 14:44:11

+0

@Michael,「?」左邊的操作數是有條件的,並且不會將任何回傳給它。整個結構'一個? b:c'是一個表達式。它在這種情況下看起來很奇怪,因爲它正在評估其副作用,並且它的返回值被丟棄。 – 2012-02-21 18:09:28

+0

@IanClelland是的,我的評論沒有任何意義,因爲我的眼睛看到'(variable ==「dog」)''在'='左邊。刪除不久... – 2012-02-21 18:15:35

回答

5

你也可以寫

(variable == 'dog') && dog_stuff(); 

,如果你沒有一個else語句。

以下幾行Backbone.js的:

options || (options = {}); 
    models = _.isArray(models) ? models.slice() : [models]; 
    model = this.getByCid(models[i]) || this.get(models[i]); 

您可以將多個語句,如果它是非常有必要的:

(1==1) && (a=2,b=3) 
alert(a); // 2 
alert(b); // 3 
+0

看起來很尷尬,但一個乾淨的方式來耦合功能 – Mikhail 2012-02-21 14:48:01

+0

謝謝,這就是我正在尋找的那種 – Dormouse 2012-02-21 14:48:45

+0

我給它+1的聰明,但老實說,沒有人應該這樣做。 IMO的效率不值得在可讀性方面下降。 – Mikhail 2012-02-21 19:04:34

1

只要格式很容易理解,你和其他人可能需要閱讀代碼,這很好。

+0

+1。它可能縮短10個字符,但最好是寫出清晰簡潔的代碼,而不是過於聰明的代碼。 – Stephen 2012-02-21 15:44:09

3

這是錯誤的,因爲你告訴你的代碼執行false。想象下面的代碼:

if (variable == "dog") 
{ 
    dog_stuff(); 
} else { 
    false; 
} 

IMO 4行條件函數調用是完全正常的。你可以把它簡寫:

if (variable == "dog") dog_stuff(); 

與此唯一的問題是,如果你把它註釋掉,或添加1更多的功能,那麼事情看起來是正確的,但不能正確執行:

if (variable == "dog") dog_walk(); dog_bark(); // dog_bark executes always! 
if (variable == "dog") // dog_walk(); 
earn_cash(); // suddenly earn_cash() is dog-dependent. 
+0

因爲這個,我一直對縮短條件語句保持警惕,但是我覺得使用三元運算符會使它相當清楚並消除對不確定依賴關係的擔心。 – Dormouse 2012-02-21 14:49:35

+0

我通常使用花括號:'if(condition){execute(); }' – Mikhail 2012-02-21 14:50:27