可能重複:
What does the || operator do?對象值中的兩條垂直線在javascript中表示什麼?
也許有人可以提供更好的代碼片段,但到底是什麼意思||
在下面?:
var time = $(el).data('start') || new Date();
它是一個or
運算符,如果是這樣,變量可以具有兩個不同的值如何纔有意義?
可能重複:
What does the || operator do?對象值中的兩條垂直線在javascript中表示什麼?
也許有人可以提供更好的代碼片段,但到底是什麼意思||
在下面?:
var time = $(el).data('start') || new Date();
它是一個or
運算符,如果是這樣,變量可以具有兩個不同的值如何纔有意義?
這是一個OR
運營商。您需要了解的是:
非邏輯值在邏輯運算符中使用時會轉換爲布爾值。將轉換爲false
的值稱爲「falsy」,將轉換爲true
的值稱爲「truthy」。 Falsy值包括諸如0
,undefined
,null
等等。請參閱Truthy and Falsy: When All is Not Equal in JavaScript。
的OR
操作短路:直到它發現這是true
,然後停止它不斷計算表達式。
所以,var time = $(el).data('start') || new Date();
意味着「設置time
爲el
元素的start
數據,或者,如果這是falsy,使用當前時間」。
hi @apsillers,感謝「falsy」和「truthy」的解釋。我之前聽到過這些,但從來不知道他們的意思。 –
簡單而直接點 - 很好的答案。 – Yatrix
它表示'或'。在這種情況下,它將$(el).data('start')
的值分配給變量time
,或者如果不存在或者返回false
,則它將分配從new Date()
返回的值。或者,正如Malovolio更清楚地指出,在意見:
...如果
$(el).data('start')
是 「falsy」(即,不確定,NULL,0,假,空字符串,或NaN),然後new Date()
是評估並分配到time
。
的邏輯運算的重要方面:
邏輯運算符通常用布爾(邏輯)值使用;當他們是,他們返回一個布爾值。然而,& &和||運算符實際上會返回其中一個指定操作數的值,因此如果這些運算符與非布爾值一起使用,則它們可能會返回非布爾值。
參考文獻:
謝謝@David,非常有幫助。現在明白了。 –
更確切地說,如果'$(el).data('start')'是「falsy」(即undefined,null,0,false,空字符串或'NaN'),那麼'new Date() '被評估並分配給'時間'。奇怪的是,空列表和空對象不被視爲虛假。 – Malvolio
這意味着logical sum
。 var time = $(el).data('start') || new Date();
如果$(el).data('start')
將具有undefined
或false
值,則time
將具有來自new Date
函數的值。
謝謝@Denis。 「邏輯和」與「或」有什麼不同? –
對於downvoters什麼是寫錯了? –
爲什麼這個答案downvoted? –
運營商||被評估的是,如果第一部分是真實的,它將它返回。如果第一部分是假的,它會返回第二部分。 因此,上述表達式是等效於:
if ($(el).data('start')) {
time = $(el).data('start');
} else {
time = new Date();
}
exp1 || exp2
評估EXP1。如果exp1爲真,那麼不評估exp2(稱爲短路評估)。如果exp1返回false,則評估exp 2。如果exp1或exp2爲真,則(exp1 || exp2)的計算結果爲true。
但是在Javascript中,您可以使用運算符來設置值。
a = something
if (prop)
a = prop
可以改寫爲
a = prop || something
喜@Esailija,感謝此引用。 –
我希望你採取的行動是刪除這個問題,因爲它與已經提出和回答的問題沒有什麼不同。 – Esailija
我搜索了一下類似於你提到的鏈接的東西,但是找不到像「two,double vertical line javascript」這樣的關鍵字。因爲簡單的英語沒有太多,所以我決定提出這個問題。 –