2015-11-09 115 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

相关问题