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

Yos*_*Yos 3 javascript boolean-logic ternary-operator

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

const result = undefined && 5;
console.log(result);
Run Code Online (Sandbox Code Playgroud)

result 将是不确定的。

然而:

const result = false && false ? 'T' : 'F';
console.log(result);
Run Code Online (Sandbox Code Playgroud)

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

Cer*_*nce 9

这是因为运算符优先级&&优先级(6)比? :(4)高,因此

false && false ? 'T' : 'F'
Run Code Online (Sandbox Code Playgroud)

评估为

(false && false) ? 'T' : 'F'
Run Code Online (Sandbox Code Playgroud)

因此,左侧求值false第一个(取第一个false),然后继续条件运算符。

如您所料,如果您在后面加上括号&&result则将是false

false && false ? 'T' : 'F'
Run Code Online (Sandbox Code Playgroud)