条件运算符和&& ||的区别构造

Difference between conditional operator and && || construct

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

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

$value ? 'YES' : 'NO';

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

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

var x = a ? b : c;

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

的值

现在,另一方面:

var x = a && b || c;

这里,只有当 a 和那个值都为真时,x 才会被设置为 b 的值。如果 b 为假,则评估将移至 ||.

的另一侧