Ell*_*ski 17 javascript firebug node.js
我正在阅读这个问题的答案(关于"wat"视频),它说:
{}+[]我目前正在从"权威指南"学习JS,所以我试着真正理解这样的事情.
我的问题是,JS何时决定将其解释{}为空代码块,而不是空对象?
另外,我想了解Node.js和Firebug之间的一些不一致之处.
萤火虫:
![用于<code> {} [] </ code>和<code>({} [])</ code>的Firebug控制台输出](https://i.stack.imgur.com/4JnaG.png)
Node.js的:
![<code> {} [] </ code>和<code>({} [])</ code>的Node.js输出](https://i.stack.imgur.com/KqbIH.png)
Zir*_*rak 22
我们来看看语言语法吧?第12节,声明:
Statement :
Block
VariableStatement
EmptyStatement
ExpressionStatement
...lots of other stuff...
Run Code Online (Sandbox Code Playgroud)
这是一种非常奇特的方式,可以说语句可以是块,变量语句,空语句,表达式语句或许多其他东西.请注意,第一个选项是"Block":
Block :
{ StatementList(opt) }
StatementList :
Statement
StatementList Statement
Run Code Online (Sandbox Code Playgroud)
再一次,这是一种奇特的方式,说一个块是一个{,可选地后跟一堆语句,然后是一个}.
这就是你在你的例子中看到的:在JavaScript解析器认为你拥有的东西可能是一个对象文字(在某个地方定义ExpressionStatement,第四个是'Statement'可能是)之前,它首先认为你有一个'Block ".
编辑:如果需要,您可以在JavaScript引擎的源代码中看到它:
Parser::ParseStatement.它检查的第一件事是我们是否在a {,如果是,则解析为block.Parser::statement再次看到第一次检查是针对a {并将其解析为块语句.关于你的第二个问题,关于这个问题已经详细介绍了.总结一句话:Node.js将您的输入视为表达式(因此它不能是"阻止"),而Firebug/Chrome开发工具将其视为"语句".
| 归档时间: |
|
| 查看次数: |
1353 次 |
| 最近记录: |