这个 JavaScript 片段(不是 object 文字)中的冒号是什么意思?

What does the colon mean in this JavaScript snippet (not an object literal)?

我很抱歉发布了一个 duplicate-looking 问题(我知道,这里有很多类似的标题问题),但是 none 已经存在的问题似乎适合我的情况。

简而言之,这里的冒号是做什么的:

<script>
  'use strict';
  foo: 1;

  //whatever else
</script>

我以为这是语法错误,但事实并非如此。我认为它不是标签,因为添加一行 break foo; 会抛出 Uncaught SyntaxError: Undefined label 'foo'(尽管 a doc page 恰好表明这是一个标签)。

我想这是最近对 JavaScript 语法的补充,因为我从未听说过冒号的这种用法。


如果有人想知道为什么我要问这个,这是我的解释:我正在阅读 an MDN doc page 并且有一个例子:

var func = () => { foo: 1 };               
// Calling func() returns undefined!

它表明,在这种情况下,大括号被视为块定界符而不是 object 文字。所以我想,不知何故 foo: 1 本身在语法上一定是合法的。确实如此。

a question,它应该涵盖JavaScript中冒号的所有使用,但它没有提到这一点,也没有答案这样做。

如果您进一步阅读所链接页面的下方,您就会明白为什么它是这样写的。

var func = () => { foo: 1 };

这是尝试从箭头函数return一个对象。

由于此处解释的原因,这不起作用:

This is because the code inside braces ({}) is parsed as a sequence of statements (i.e. foo is treated like a label, not a key in an object literal). (source)

因此 returned 值需要用括号括起来:

var func = () => ({foo: 1});

实际回答你的问题:

这是一个标签。

你不能就这样断章取义foo: 1