带有比较运算符的布尔表达式的类型

typeof of boolean expression with comparison operator

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

根据变量 foo 是否定义,typeof 的计算结果为 truefalse

但是,如果 foo !== 'undefined' 的计算结果为 true,则 truetypeof 的计算结果应为 'boolean'。 为什么它的计算结果为 truefalse

因为 typeof 和非质量运算符的优先规则定义该表达式被解析为

(typeof foo) !== 'undefined'

有关详细信息,请参阅 MDN page on operator precedencetypeof 是优先级 16; inquality 的优先级为 10。typeof 的更高优先级意味着它 "binds" 与其操作数更紧密。

顺便问一下,为什么你的代码中有未定义的变量?