JavaScript eval("{}")返回行为?

ldi*_*ual 4 javascript ecmascript-5

根据ECMA-262规范,以下声明返回1:

eval("1;;;;;")
eval("1;{}")
eval("1;var a;")
Run Code Online (Sandbox Code Playgroud)

确保:

StatementList的值是StatementList中生成Statement的最后一个值的值.

你能解释这些不同的回报吗?

eval("{}") // undefined
eval("var a={}; a;") // {}
eval("var a={};") // undefined
Run Code Online (Sandbox Code Playgroud)

1;和之间有什么区别{};

Ry-*_*Ry- 6

单独留下,{}被解释为一个,而不是一个对象.它不包含任何语句,因此不会影响,例如,eval("1;{}").要强制将其解释为对象,可以使用括号:

eval("1;({})"); // {}
Run Code Online (Sandbox Code Playgroud)