2012-01-06 110 views
4

我經常看到和使用的代碼,如:在條件運算符內部運行代碼是否安全?

var myvar = (1 < 2) ? 3 : 4 ; //if 1 < 2 then myvar = 3, else = 4 

但我剛剛看到正在執行代碼的代碼,就像某種更換爲if(){}else{}

例子:

(1 < 2) ? alert("example1") : alert("example2"); 

我想到的第一個想法是,「哇,這就像6-7個字符短」,「無盡的可能性」或「這是我的一天」。

我的問題:

  • 這件事無差錯和安全使用? (比如,裏面有很多代碼和嵌套的東西)

現在,我將繼續以正常方式繼續使用它,我擔心如果我開始使用它來執行代碼段不行。

+0

在我看來,你應該只使用這個三元條件來做簡短的指示。對於屬於真實條件或假條件的代碼塊,您應該使用if {} else {},但這只是我的看法。我也對使用這種三元條件的最佳方法感興趣。 – 2012-01-06 04:27:27

回答

4

也有一些例外。你不能做到這一點:

  • break
  • continue
  • 任何塊像ifforwhiledo,或try

例如。更重要的是,它可以與你的操作順序混亂:

x < 3 ? l = true : r = true; // Syntax error, = has lower precedence than ?: 

但是,這不是理由不這樣做,那是因爲它是醜陋的。哪一個更清晰給你,這樣的:

if(i > 5) { 
    alert('One'); 
} else { 
    alert('Two'); 
} 

i > 5 ? alert('One') : alert('Two'); 

?這不太對,是嗎?保存角色絕不是做任何事情的理由,真的;否則不會有任何評論或空白。像Google Closure Compiler這樣的優化器會盡可能自動爲您轉換,並且還有很多其他地方可以保存。最後,它只是你發現最方便和可讀的。另外,如果你最終需要breakcontinue等,那麼它將是相當不穩定和不吸引人的代碼。

+0

接受,因爲指出了明顯沒有人知道它們存在的異常(或者至少,他們都只是懷疑地決定不要在他們的答案中提及他們) – ajax333221 2012-01-06 04:44:30

7

這個東西沒有錯誤且安全使用嗎? (比如,內部有很多代碼 ,以及嵌套的東西)

是的。但是,其中的代碼越多,它的可讀性就越差。

我更喜歡使用它(條件運算符)來獲取簡短的語句。爲了可讀性和可維護性,任何更復雜的內容都應得到if/else

+0

我在製作項目時通常有2個版本,原始版本中包含很長的var名稱和東西,而其中一個版本的代碼可能較少。 (我只打算在第二次使用這種方法) – ajax333221 2012-01-06 04:28:43

+1

有趣的。爲什麼甚至有第二個?對我而言,這只是更多的代碼來維護。如果你專門針對JavaScript和縮小與第二,那裏有東西已經這樣做。 :) – 2012-01-06 04:30:00

+0

我知道JS縮小器,我只是懷疑他們會用這種方法縮小if/else – ajax333221 2012-01-06 04:33:45

2

您指的是ternary運算符。它通常用於設置與簡單的字符串變量是這樣的:

var phone = old ? "blackberry" : "iPhone" 

這比使用更簡單的,如果:

var phone = "iphone" 
if (old) { 
    phone = "blackberry" 
} 

它在這方面的好,您所描述的例子,只要它開始變得困惑,否則我絕對不會推薦它!

你的例子可能是犯了這樣的好:

var msg = 1 < 2 ? "alert1" : "alert2"; 
alert(msg); 
1

你也可以這樣寫:

alert(1<2? "example1" : "example2"); 

三元opertator是專爲簡單的情況下,有時開發商得意忘形,並用它來代替多的if..else語句,例如

var someVal = foo < bar? 'yes' : bar > fum? : fum : fi != fee? fi : fee; 

這不是一個好主意恕我直言。