2013-11-25 38 views
4

這應該是一個相當簡單的問題,我無法在任何地方找到答案,所以我想我可以省點時間在這裏問問。Javascript &&運算符如同語句?

我一直在尋找一些JavaScript代碼,發現該形式的表達式:

a < b && (other maths statements); 

其他數學語句只是分配的變量和簡單的東西。

我的問題是這樣的。這是另一種編寫緊湊if語句的方式嗎?

我知道這個陳述嗎?if-block:else-block;是做到這一點的一種方法,但作爲& &是短路和左結合,這是我能想到的所有事情。我知道你不能有這個方法的其他塊,但它非常整齊。

有人可以驗證我清晨在這個時候在清晨請。

感謝,

+0

這只是一個布爾表達式,它將返回「true」或「false」。它可以在if語句中使用。但沒有'如果(a && b)'或任何一個變量賦值它什麼都不會做...... – Igle

+0

只是不這樣做。可讀性/可維護性比說「嗨,我在同一行寫了同樣的東西,這不是很酷嗎?」更重要。如果這是出於某種學術目的,那麼它是另一回事。 – SuperSaiyan

+2

是的,它的工作原理與您的短路評估完全相同。不,這不一定比編寫'if(...)'好,只是因爲它會提示這樣的問題。 – deceze

回答

7

是的,你可以它。如果a小於b其他語句將執行。

這就是說,你可能不應該做到這一點。與其試圖爲自己節省一小部分打字量,您應該使用更易讀的代碼片段,其目的非常明顯。畢竟,如果你需要檢查你是不是誤解了它,那麼其他需要閱讀或修改代碼的程序員可能會遇到同樣的問題。

如果您嘗試執行多項任務,但也有一個缺陷,但其中一項中間任務是針對「虛假」的值。考慮下面的例子:

a < b && (a = 1) && (b = 0) && (c = 3); 

本質上,如果a小於b,設置a爲1,b爲0,c到3但是,(b = 0)假(當轉換成布爾0被認爲是假) ,所以(c = 3)部分從不執行。很顯然,對於那些對JavaScript有相當的瞭解的人來說,任何對JavaScript有足夠了解的人都可能會發現它會失敗,但如果a,bc的值來自其他地方,則不會立即表明它不會始終有效。

+0

儘可能多的想法。我只是想了解我今天早上給出的一些代碼。如果我真的想在一行上完成,我會使用條件化的if-block:else-block方法,但這是一個有趣的觀察方式。我也喜歡你的例子(但是你是對的,大多數對編程有基本把握的人應該會意識到這一點)。 – Blue42

+1

在這種情況下,你會不會'a

1

您可以使用此類型的if-else語句的更短的代碼,但在我看來,它的可讀性變差:

的JavaScript

var el = document.getElementById('test'), 
a = 1, 
b = 0; 

a>b && (el.innerHTML = "True") || (el.innerHTML = "False"); 

HTML

<div id="test"></div> 

An example jsFiddle

如果您將運算符從大於小於,則會在「test」DIV內部顯示「False」。

+1

對於單個賦值操作,使用三元運算符更有意義:'el.innerHTML =(a> b?「True」:「False」);'。你的例子更接近於你如何用Lua這樣的語言來做到這一點,它缺乏實際的三元運算符,但具有與JavaScript相同的動態類型和隱式布爾轉換。 –

+0

我同意。三元運算符是簡化的if-else語句的更好例子,特別是在單個賦值的簡單情況下。儘管我們都在我們的答案中指出,但是這兩個例子的可讀性都較差,並且使您的代碼難以理解。 – Trendy

+0

你是對的,可讀性是關鍵!三元運算符很容易理解,儘管大多數人都應該在某個點或另一個點碰到它。我提出的方法對我來說是新穎的,所以謝謝你回答=) – Blue42