繁体   English   中英

没有大括号的Javascript键/值对

[英]Javascript key/value pair with no braces

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

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

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

> "id": 5
... 

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

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

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

因此它打印5

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

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

另一个例子是:

{}

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

规格

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

想象一下,你已经编写了一个嵌套的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运行。

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

outer: for(var x = 0; x < 10; x++) {
  for(var y = 0; y < 10; y++) {
    if(thereIsAProblem) {
      continue outer;
    }
  }
  console.log('done a column');
}

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM