没有大括号的{Javascript键/值对

时间:2016-07-08 16:39:59

标签: javascript node.js

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

> { id: 5 }
{ id: 5 }
> id: 5
5

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

> "id": 5
... 

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

3 个答案:

答案 0 :(得分:5)

这不是错误。您正在声明一个标签,后跟Number字面值。

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

因此它会打印5

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

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

另一个例子是:

{}

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

来自the spec

  

声明可能以标签为前缀。仅标记语句   与标记的break和continue语句一起使用。   ECMAScript没有goto语句。声明可以是a的一部分   LabelledStatement,它本身可以是LabelledStatement的一部分,   等等。这种方式引入的标签统称为   作为描述个人语义的“当前标签集”   语句。

答案 1 :(得分:1)

想象一下,你已经写了一个嵌套的Moment{ _d:Invalid Date _i:Invalid Date _isAMomentObject:true _isUTC:false _isValid:false _locale:Locale _pf:Object __proto__:Object }

for..loop

您希望突破内部循环并开始外部循环的下一次迭代,但您不希望for(var x = 0; x < 10; x++) { for(var y = 0; y < 10; y++) { if(thereIsAProblem) { break; } } console.log('done a column'); } 运行。

您可以使用标签扩充循环,以准确指定要继续的位置。

console.log

虽然从技术上讲这是JavaScript中的一个标准功能,但你不会经常看到它在野外使用,因为几乎总是有更惯用的方式来做事。

答案 2 :(得分:-1)

我认为这是JavaScript解析器的一个错误。当您输入id : anything : 5时,它会输出相同的结果(这也适用于Chrome)。