带比较运算符的布尔表达式的typeof

Dee*_*ven 4 javascript typeof operator-precedence

if (typeof foo !== 'undefined') {
    // Now we know that foo is defined, we are good to go.
}
Run Code Online (Sandbox Code Playgroud)

typeof计算结果为truefalse基于该变量是否foo被定义或没有.

但是,说,如果foo !== 'undefined'计算结果为true,那么typeoftrue应求'boolean'.为什么评估truefalse

小智 6

因为typeof和不等式运算符的优先级规则定义该表达式被解析为

(typeof foo) !== 'undefined'
Run Code Online (Sandbox Code Playgroud)

有关更多信息,请参阅有关运算符优先级MDN页面.typeof优先16; 不等式优先级10.优先级越高typeof意味着它与其操作数"更紧密地"绑定.

那么,为什么你的代码中有未定义的变量?