Javascript 为什么eval()会抛出未定义的变量?

Javascript 为什么eval()会抛出未定义的变量?,javascript,undefined,eval,Javascript,Undefined,Eval,下面的代码 console.log("1",eval(undefined)); console.log("2",eval(window.UndefVar)); console.log("3",eval(UndefVar)); 生成以下输出 1 undefined 2 undefined UndefVar is not defined 也许IDK有一些内部工作,但只抛出未定义的变量而忽略属性&未定义本身似乎很奇怪,尽管在FF&Chrome中也是如此,这让我假设它是在规范中设置的。未定义的是一个

下面的代码

console.log("1",eval(undefined));
console.log("2",eval(window.UndefVar));
console.log("3",eval(UndefVar));
生成以下输出

1 undefined
2 undefined
UndefVar is not defined

也许IDK有一些内部工作,但只抛出未定义的变量而忽略属性&未定义本身似乎很奇怪,尽管在FF&Chrome中也是如此,这让我假设它是在规范中设置的。

未定义的
是一个值为未定义的名称<代码>窗口是一个对象,您可以动态地为对象分配名称,但尝试访问未设置的对象将返回未定义的名称。另外,名称
UndefVar
没有定义,因此在调用eval之前将抛出
ReferenceError
,因为它必须首先计算参数。

eval
在这里是不相关的。类似于没有
eval()
的代码也会抛出异常。这是一个很好的有效问题。StackOverflow的目的是帮助人们克服无知,比如用
eval
标记这个问题,而不是因为他们还不知道答案而与他们对抗。因此,用
eval
标记这个问题是非常合理的:因为如此,无知是有用答案和学习的生命线。
window.UndefVar
UndefVar
相同。即使它是以不同的方式访问的,我也不清楚为什么它会给出不同的结果。@Zero下划线EOU对未定义对象属性的引用不是运行时错误。对未定义变量的引用无效。这就是语言的工作方式。