2013-05-21 20 views
1

將具有邏輯運算符的表達式作爲參數傳遞給函數意味着什麼?在函數參數中使用表達式和邏輯運算符

例如:

myFunc(expr_1 || expr_2 || expr_3); 

是否等同於以下:?!

var expr_all = expr_1 || expr_2 || expr_3; 
myFunc(expr_all); 

如果是這樣,則它應該如何,如果所有三個表達式的值轉換爲字符串以特別工作(如反對布爾),或者如果expr_1undefined什麼?

謝謝。

+1

這將通過第一truthy值(或僅僅是最後一個,當沒有一個是truthy)的功能,那些3個變量之間。例如,如果字符串爲空,那麼'myFunc(false || null ||「foo」)','「foo」'將被傳遞 – Ian

+0

,否則它是true。 – dandavis

回答

3

myFunc(expr_1 || expr_2 || expr_3); Is it equivalent to the 如下:?!

var expr_all = expr_1 || expr_2 || expr_3; myFunc(expr_all);

是的。它會將第一個真值傳遞給函數。

Truthy值是不falsenullNaN""0,或undefined

這工作,因爲||是邏輯或聲明的值。它將從左到右返回第一個對象的值,即truthy。否則它將返回false。

參見這些例子:

"a" || "b" //"a" 

"" || "b" //"b" 

"" || "" //"" 

"" || undefined //undefined 

"" || [] // [] 
+0

將''''加入到列表中 – Ian

+0

並且'[]'(空列表)和'NaN'(非數字,一個數字操作的結果不能像'5 - 一個「')。 – Halcyon

+1

是我打算之前打入輸入。 @Fritz,[]是truthy –

2

||不是比較運算符。這是一個速記條件。如果左邊的表達式計算結果爲true,則返回該表達式,否則返回右邊的表達式。

如果在評估完成之前評估未定義的變量:undefinedVar || 3那麼整個評估失敗併發生錯誤。

您的2個代碼示例是等效的。

1

它們是等價的(如果忽略中間變量)。

JavaScript的邏輯OR運算符會短路,因此它會在該OR鏈中的第一個真值中斷並返回它。如果他們都不真實,最後一個會被退回。

Truthy值是falsy值,它是0''falsenullundefined等,如果這些變量中的一個恰好是0,你可能會遇到問題的相反。