JavaScript eval(“{}”)返回行为?

时间:2012-05-28 22:48:05

标签: javascript ecmascript-5

根据ECMA-262 Specification,以下语句返回1

eval("1;;;;;")
eval("1;{}")
eval("1;var a;")

确保:

  

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

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

eval("{}") // undefined
eval("var a={}; a;") // {}
eval("var a={};") // undefined

1;{};之间的区别是什么?

2 个答案:

答案 0 :(得分:6)

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

eval("1;({})"); // {}

答案 1 :(得分:2)

我认为eval正在将{}解释为代码块的分隔符,因此没有内在价值。