为什么三元表达式在Javascript中的falsy值之后执行?
Why ternary expression is executed after falsy value in Javascript?
据我所知,表达式不会在 Javascript 中的虚假值后执行。例如在下面的语句中:
const result = undefined && 5;
console.log(result);
result
将是未定义的。
但是:
const result = false && false ? 'T' : 'F';
console.log(result);
result
将等于 F
。为什么三元表达式仍然执行?
这是因为 operator precedence: &&
的优先级 (6) 高于 ? :
(4),所以
false && false ? 'T' : 'F'
评估为
(false && false) ? 'T' : 'F'
因此,左侧首先计算为 false
(取第一个 false
),然后继续进行条件运算符。
如果您在 &&
后加上括号,result
将是 false
,如您所料:
const result = false && (false ? 'T' : 'F');
console.log(result);
常量结果=假&&假? 'T' : 'F'
我们知道三元表达式是 IF else 条件的简写形式,上面的语句就像
if(false && false){
return 'T'
}else{
return 'F'
}
所以我们得到的结果值为 "F"
据我所知,表达式不会在 Javascript 中的虚假值后执行。例如在下面的语句中:
const result = undefined && 5;
console.log(result);
result
将是未定义的。
但是:
const result = false && false ? 'T' : 'F';
console.log(result);
result
将等于 F
。为什么三元表达式仍然执行?
这是因为 operator precedence: &&
的优先级 (6) 高于 ? :
(4),所以
false && false ? 'T' : 'F'
评估为
(false && false) ? 'T' : 'F'
因此,左侧首先计算为 false
(取第一个 false
),然后继续进行条件运算符。
如果您在 &&
后加上括号,result
将是 false
,如您所料:
const result = false && (false ? 'T' : 'F');
console.log(result);
常量结果=假&&假? 'T' : 'F'
我们知道三元表达式是 IF else 条件的简写形式,上面的语句就像
if(false && false){
return 'T'
}else{
return 'F'
}
所以我们得到的结果值为 "F"