【问题标题】:JavaScript eval("{}") return behavior?JavaScript eval("{}") 返回行为?
【发布时间】:2012-05-28 22:48:05
【问题描述】:

根据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;{}; 有什么区别?

【问题讨论】:

标签: javascript ecmascript-5


【解决方案1】:

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

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

【讨论】:

  • 我明白了!我什至没有考虑过阻塞的事情,谢谢 ;)
  • "({})" 就足够了...(为了与帖子的第二部分保持平衡,它没有1;
【解决方案2】:

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

【讨论】:

    猜你喜欢
    • 2015-03-30
    • 1970-01-01
    • 2023-04-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多