Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/446.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 条件运算符与&&|建造_Javascript_Ternary Operator_Conditional Operator - Fatal编程技术网

Javascript 条件运算符与&&|建造

Javascript 条件运算符与&&|建造,javascript,ternary-operator,conditional-operator,Javascript,Ternary Operator,Conditional Operator,以下陈述是否存在显著差异: $value && 'YES' || 'NO'; 及 考虑到您当前的代码,它们或多或少是相同的。如果YES被错误的东西所取代,那就不同了。下面的代码将两者与各种输入进行比较 函数test1($value){ 返回$value&“是”| |“否”; } 函数test2($value){ 返回$value?'YES':'NO'; } 函数比较(desc,$value){ log(desc、test1($value)、test2($value)); }

以下陈述是否存在显著差异:

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


考虑到您当前的代码,它们或多或少是相同的。如果
YES
被错误的东西所取代,那就不同了。下面的代码将两者与各种输入进行比较

函数test1($value){
返回$value&“是”| |“否”;
}
函数test2($value){
返回$value?'YES':'NO';
}
函数比较(desc,$value){
log(desc、test1($value)、test2($value));
}
比较(“真”,真);
比较(“假”,假);
比较(“真实1”,1);
比较(“真实2”、“foo”);
比较(“未定义”);

比较(“falsey”和“”)
如果像在代码示例中一样使用常量进行编码,则没有区别。尤其重要的是,在得到“是”的位置的常数是这样一个真实的值。但是,如果您不知道结果值是什么,那么是的,它们是不同的。考虑:

var x = a ? b : c;
在该代码中,如果
a
是真实的,
x
将被设置为
b
的值,这是肯定的。如果不是,它将被设置为
c
的值

另一方面,现在:

var x = a && b || c;

这里,
x
将被设置为
b
的值,前提是
a
和该值均为真值。如果
b
是错误的,那么评估将转到
|

的另一边,如果
'YES'
是错误的东西呢?不,只是测试了一下,我错了。我没有意识到如果$value是假的,| |仍然会被计算。它们在功能上是相同的,但在我看来,三元的可读性要高得多,但是
是的
是truthy@Jamiec我来澄清开头的句子。好的,现在我明白了。
var x = a && b || c;