2012-05-05 22 views
15

可能重複:
What does the || operator do?對象值中的兩條垂直線在javascript中表示什麼?

也許有人可以提供更好的代碼片段,但到底是什麼意思||在下面?:

var time = $(el).data('start') || new Date(); 

它是一個or運算符,如果是這樣,變量可以具有兩個不同的值如何纔有意義?

+0

喜@Esailija,感謝此引用。 –

+0

我希望你採取的行動是刪除這個問題,因爲它與已經提出和回答的問題沒有什麼不同。 – Esailija

+1

我搜索了一下類似於你提到的鏈接的東西,但是找不到像「two,double vertical line javascript」這樣的關鍵字。因爲簡單的英語沒有太多,所以我決定提出這個問題。 –

回答

33

這是一個OR運營商。您需要了解的是:

  • 非邏輯值在邏輯運算符中使用時會轉換爲布爾值。將轉換爲false的值稱爲「falsy」,將轉換爲true的值稱爲「truthy」。 Falsy值包括諸如0undefined,null等等。請參閱Truthy and Falsy: When All is Not Equal in JavaScript

  • OR操作短路:直到它發現這是true,然後停止它不斷計算表達式。

所以,var time = $(el).data('start') || new Date();意味着「設置timeel元素的start數據,或者,如果這是falsy,使用當前時間」。

+0

hi @apsillers,感謝「falsy」和「truthy」的解釋。我之前聽到過這些,但從來不知道他們的意思。 –

+0

簡單而直接點 - 很好的答案。 – Yatrix

5

它表示'或'。在這種情況下,它將$(el).data('start')的值分配給變量time,或者如果不存在或者返回false,則它將分配從new Date()返回的值。或者,正如Malovolio更清楚地指出,在意見:

...如果$(el).data('start')是 「falsy」(即,不確定,NULL,0,假,空字符串,或NaN),然後new Date()是評估並分配到time

的邏輯運算的重要方面:

邏輯運算符通常用布爾(邏輯)值使用;當他們是,他們返回一個布爾值。然而,& &和||運算符實際上會返回其中一個指定操作數的值,因此如果這些運算符與非布爾值一起使用,則它們可能會返回非布爾值。

參考文獻:

+0

謝謝@David,非常有幫助。現在明白了。 –

+1

更確切地說,如果'$(el).data('start')'是「falsy」(即undefined,null,0,false,空字符串或'NaN'),那麼'new Date() '被評估並分配給'時間'。奇怪的是,空列表和空對象不被視爲虛假。 – Malvolio

-1

這意味着logical sumvar time = $(el).data('start') || new Date();如果$(el).data('start')將具有undefinedfalse值,則time將具有來自new Date函數的值。

+0

謝謝@Denis。 「邏輯和」與「或」有什麼不同? –

+1

對於downvoters什麼是寫錯了? –

+0

爲什麼這個答案downvoted? –

1

運營商||被評估的是,如果第一部分是真實的,它將它返回。如果第一部分是假的,它會返回第二部分。 因此,上述表達式是等效於:

if ($(el).data('start')) { 
    time = $(el).data('start'); 
} else { 
    time = new Date(); 
} 
5
exp1 || exp2 

評估EXP1。如果exp1爲真,那麼不評估exp2(稱爲短路評估)。如果exp1返回false,則評估exp 2。如果exp1或exp2爲真,則(exp1 || exp2)的計算結果爲true。

但是在Javascript中,您可以使用運算符來設置值。

a = something 

if (prop) 

a = prop 

可以改寫爲

a = prop || something