【发布时间】:2014-02-03 08:11:09
【问题描述】:
这是一个理论问题,而不是实际问题。这是关于解析一些由花括号分隔的代码。
这里有两个object initializers 的例子:
f({});
({a:3})
以下是blocks 的两个示例:
;{}
{a:3;}
在实践中,如果前面的代码需要表达式,{...} 似乎会分开一个块。
但是我从来没有在 ECMAScript 规范中看到过这样的明确或明显的规则,我什至不确定这是真的。
在某处是否有明确的、明确的参考?如果这不是正确的规则?
【问题讨论】:
-
ExpressionStatement: [lookahead ∉ {{, function}] Expression; -
@Bergi 对于刚从假期回来,咖啡还没有开始的可怜的程序员,你能说得更清楚些吗?
-
表达式语句不能以大括号开头,因此“由大括号分隔的语句”始终是一个块。所有其他花括号都不是语句,而是表达式 - 对象初始化器。
-
@dystroy ({}) 是一个表达式。这就是为什么你在处理 eval 时用
()/ 包装 json -
(仅相关信息) eval 用于 JavaScript 表达式、语句或语句序列..但有时我们需要将其解析为表达式。例如当我们得到像 '{"employees":"John"}' 这样的 json 时,我们需要确保它不会被用作语句(这会导致错误,因为它认为(作为语句)它是一个块代码但语句不能与对象文字“员工”一起使用。所以我们用 (..) 包装它,现在它将被解析为对象而不是语句。(这将导致错误)。示例:@987654328 @ //错误。而
eval('({"a":"1"})')不是
标签: javascript syntax grammar ecmascript-5