没有大括号的Javascript键/值对

Pau*_*rth 3 javascript node.js

我注意到在nodejs和浏览器中,你可以给出没有大括号的键/值对,并且它被接受.它评估该对的一半值.例如:

> { id: 5 }
{ id: 5 }
> id: 5
5
Run Code Online (Sandbox Code Playgroud)

但如果你引用id,那么节点需要更多输入:

> "id": 5
... 
Run Code Online (Sandbox Code Playgroud)

那么这里发生了什么?什么语法id: 5没有大括号?

Ben*_*Ben 5

这不是一个错误.您正在声明一个标签,后面是一个Number文字.

控制台默认打印出代码中最后一个表达式的结果.

因此它打印5.

您的困惑源于这样一个事实:完全相同的语法可能意味着完全不同的东西,具体取决于上下文.

这是JavaScript解析器根据规范的规则来决定的.

另一个例子是:

{}
Run Code Online (Sandbox Code Playgroud)

这是一个对象文字还是块?上下文提供了答案.

规格:

声明可以以标签为前缀.带标签的语句仅与带标签的break和continue语句一起使用.ECMAScript没有goto语句.Statement可以是LabelledStatement的一部分,LabelledStatement本身可以是LabelledStatement的一部分,依此类推.在描述各个语句的语义时,以这种方式引入的标签统称为"当前标签集".