2015-11-09 149 views
1

看來這兩個表達式產生相同的結果。他們之間有什麼區別嗎?JavaScript中的(cond && value || default_value)和(cond?value:default_value)之間是否有區別?

+0

FWIW第二運營商被稱爲三元。 –

+0

@ cricket_007-ECMA-262稱它爲[*條件運算符*](http://www.ecma-international.org/ecma-262/6.0/index.html#sec-conditional-operator),它是** a **三元操作符。 ;-) – RobG

+0

似乎三元操作的條件是不完整的。對於2個表達式的公平比較,第二個表達式應該是'cond && value?value:default_value' –

回答

5

如果您cond條件truthy,但你的value不,第一個表達式將前往default_value,而你的第二個表達式會盡快給valuecond是truthy,不管實際的value

實施例:

var cond = true, 
    value = false, 
    default_value = "whatever"; 

cond && value || default_value; // gives "whatever" 
cond ? value : default_value; // gives `false` 

value = "truthy"; 
cond && value || default_value; // gives "truthy" 
cond ? value : default_value; // gives "truthy" 

value = null; // or `undefined`, or "" (empty string), or any falsy value. 
cond && value || default_value; // gives "whatever" 
cond ? value : default_value; // gives `null` (or `undefined`, or "") 
// or whatever is in `value` 

現場演示:http://jsfiddle.net/artxvLab/

+0

其實你是對的,只有當「value」是false時,它纔會有所不同。在我的條件中,「value」是一個String,一個對象或null.So除了你提到的,這兩個表達式是完全相等的? –

+0

請在'(cond && value)'處刪除'(...)'。他們沒有必要。 –

+0

@VincentChen我更新了代碼以顯示更多情況,並添加了一個現場演示。兩個表達式之間的唯一區別是'value'是[falsy](https://developer.mozilla.org/en-US/docs/Glossary/Falsy),其中值包括'「」(空字符串)。 – ghybs

相關問題