【问题标题】:Difference between conditional operator and && || construct条件运算符和 && 的区别 ||构造
【发布时间】:2017-02-23 16:04:23
【问题描述】:

以下说法是否有显着差异:

$value && 'YES' || 'NO';

$value ? 'YES' : 'NO';

【问题讨论】:

  • 如果'YES' 是假的怎么办?
  • 没有,刚刚测试过,我错了。没有意识到如果 $value 是假的,||仍会得到评估。
  • 它们在功能上是相同的,但 IMO 三元组更易读

标签: javascript ternary-operator conditional-operator


【解决方案1】:

如果您使用常量进行编码,就像在您的代码示例中一样,那么不,没有区别。尤其重要的是,在您获得"YES" 的位置的常量是一个真实的值。但是,当您不知道结果值是什么时,是的,它们是不同的。考虑:

var x = a ? b : c;

在该代码中,如果a 为真,那么x 将被设置为b 的值。如果不是,它将被设置为c 的值。

现在,另一方面:

var x = a && b || c;

这里,只有当a 和该值都为真时,x 才会设置为 b 的值。如果b 是假的,那么评估将转到|| 的另一边。

【讨论】:

  • 但是YES 真实的
  • @Jamiec 我会澄清开场白。
  • 好的,现在我明白了。
【解决方案2】:

考虑到您当前的代码,它们或多或少是相同的。如果YES 被虚假的东西取代,那将是另一回事。下面的代码将两者与各种输入进行比较。

function test1($value){
  return $value && 'YES' || 'NO';
}

function test2($value){
  return $value ? 'YES' : 'NO';
}

function compare(desc, $value){
   console.log(desc, test1($value), test2($value));
}

compare("true",true);
compare("false",false);


compare("truthy1",1);
compare("truthy2","foo");
compare("undefined");
compare("falsey","")

【讨论】:

    猜你喜欢
    • 2014-01-29
    • 2015-03-03
    • 1970-01-01
    • 2010-11-08
    • 2014-05-18
    • 2012-07-27
    • 2013-07-06
    • 2013-11-02
    相关资源
    最近更新 更多