【问题标题】:Is there any difference between (cond && value || default_value) and (cond ? value : default_value) in JavaScript?JavaScript 中的 (cond && value || default_value) 和 (cond ? value : default_value) 有什么区别吗?
【发布时间】:2016-02-09 18:39:15
【问题描述】:

似乎这两个表达式产生了相同的结果。它们之间有什么区别吗?

【问题讨论】:

  • FWIW 第二个运算符称为三元。
  • @cricket_007—ECMA-262 将其称为Conditional Operator,它是 a 三元运算符。 ;-)
  • 看来三元运算中的条件不完整。为了公平比较这两个表达式,第二个表达式应该是 cond && value ?value : default_value

标签: javascript


【解决方案1】:

如果您的cond 条件为真,但您的value 不是,则第一个表达式将转到default_value,而您的第二个表达式将在cond 为真后立即给出value,无论如何实际的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/

【讨论】:

  • 其实你是对的,只有当“value”为假时,它才会有所不同。在我的情况下,“value”是一个String,一个Object或null。所以除了你提到的,这两个表达式完全相等?
  • 请删除(cond && value)处的( ... )。它们不是必需的。
  • @VincentChen 我更新了代码以显示更多情况,并添加了一个现场演示。两个表达式之间的唯一区别是valuefalsy,其中包括值是""(空字符串)。
猜你喜欢
  • 2011-05-06
  • 2011-02-19
  • 1970-01-01
  • 2020-01-01
  • 1970-01-01
  • 2016-02-27
  • 2017-02-16
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多