不带大括号的 Javascript 键/值对

Javascript key/value pair with no braces

本文关键字:Javascript 值对      更新时间:2023-09-26

我注意到在nodejs和浏览器中,你可以给出一个不带大括号的键/值对,并且它被接受。它的计算结果是该对的一半值。例如:

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

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

> "id": 5
... 

这到底是怎么回事呢?没有大括号时id: 5什么语法?

这不是

一个错误。您正在声明一个标签,后跟一个Number文本。

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

因此,它打印5.

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

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

另一个例子是:

{}

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

从规格:

语句可以以标签为前缀。带标签的语句仅是 与标记的中断和继续语句结合使用。 ECMAScript 没有 goto 语句。语句可以是 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)。