条件运算符和&& ||的区别构造
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
为假,则评估将移至 ||
.
的另一侧
以下说法是否有显着差异:
$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
为假,则评估将移至 ||
.