以下陈述是否有任何重大差异:
$value && 'YES' || 'NO';
和
$value ? 'YES' : 'NO';
答案 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","")