为什么三元表达式在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"