为什么在Javascript中的假值之后执行三元表达式?

时间:2019-09-04 07:30:14

标签: javascript ternary-operator boolean-logic

据我所知,在Javascript中伪造的值之后表达式不会执行。例如下面的语句:

const result = undefined && 5;
console.log(result);

result是不确定的。

但是:

const result = false && false ? 'T' : 'F';
console.log(result);

result将等于F。为什么仍然执行三元表达式?

2 个答案:

答案 0 :(得分:9)

这是因为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);

答案 1 :(得分:1)

const result = false && false? 'T':'F'

我们知道三元表达式是IF else条件的简写,上面的语句就像

if(false && false){ 
    return 'T'
}else{
    return 'F'
}

所以结果值我们变成“ F”