条件运算符与&&和||构造

时间:2017-02-23 16:04:24

标签: javascript ternary-operator conditional-operator

以下陈述是否有任何重大差异:

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

$value ? 'YES' : 'NO';

2 个答案:

答案 0 :(得分:5)

如果您使用常量进行编码,就像在代码示例中一样,那么不,没有区别。特别重要的是,你所拥有的"YES"位置的常数是如此真实的价值。但是,当您不知道结果值是什么时,那么他们就是不同的。考虑:

var x = a ? b : c;

在该代码中,如果a是真实的,x将被设置为b的值。如果不是,则将其设置为c的值。

现在,另一方面:

var x = a && b || c;

此处,x仅在b和该值均为真时才会设置为a的值。如果b为假,则评估将转移到||的另一侧。

答案 1 :(得分:1)

根据您当前的代码,它们或多或少相同。如果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","")