当提供未声明的变量标识符时,typeof如何绕过ReferenceError?

Ben*_*Ben 3 javascript

foo; // ReferenceError: foo is not defined

typeof(foo); // undefined
Run Code Online (Sandbox Code Playgroud)

如何typeof规避ReferenceError何时提供未声明的变量标识符?这只是JavaScript解释器"神奇"还是可以用用户土地概念来解释?

Ber*_*rgi 7

不,这在用户土地概念中无法解释 - 如果你愿意,这是"神奇的".

EcmaScript使用Reference规范类型来解释这样的情况.这些引用用来描述任务,语义方法调用,eval等等.通常,在它们上调用GetValue算法以取消引用它们(例如,在表达式语句的求值中),并且这确实抛出ReferenceError了引用不可解析的时间.

相比之下,typeof运算符不只是执行GetValue,而是有一个特殊情况来处理这些未声明的变量引用:

  1. 如果Type(val)参考,那么

    一个.如果IsUnresolvableReference(val)true,请返回"undefined".