冒号在这个JavaScript代码段中是什么意思(不是对象文字)?

时间:2017-10-04 08:48:17

标签: javascript syntax colon

我为发布一个看起来很复杂的问题道歉,(我知道,这里有一堆类似的标题问题),但是现有的问题似乎都不适合我的情况。

简而言之,冒号在这里做了什么:

<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!

它表明,在这种情况下,花括号被视为块分隔符而不是对象文字。所以我认为,某种程度上foo: 1本身必须在语法上合法。事实确实如此。

a question,它应该涵盖JavaScript中每次使用冒号的内容,但它没有提到这一点,也没有回答。

1 个答案:

答案 0 :(得分:3)

如果你已经阅读了你所链接的页面的更多内容,你就会明白为什么会这样写。

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

这是尝试从箭头函数返回对象。

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

  

这是因为大括号({})内的代码被解析为一系列语句(即foo被视为标签,而不是对象文字中的键。 (source

因此返回的值需要包含在括号中:

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

要真正回答你的问题:

这是一个标签。

你不能仅仅将foo: 1脱离上下文。