为什么不是`foo:'bar'`Javascript中的语法错误?

Chr*_* W. 5 javascript syntax ecmascript-5 ecmascript-6

我的一位同事写了ES6代码......

return map(orderedContentUuids, contentUuid => { uuid: contentUuid });

你可能猜到他打算返回对象{uuid: contentUuid },但由于它是一个箭头函数,花括号{实际上会启动一个新的块.(正确的代码是return map(orderedContentUuids, contentUuid => ({ uuid: contentUuid }));).

但是,出乎意料的是,此代码转换并运行没有错误.没有错误,因为uuid: contentUuid似乎评估contentUuid.

您可以看到,如果您放入JavaScript控制台,foo: 'bar'它将评估为"bar".

咦?这是怎么回事.从什么时候开始就是有效的JS?

Chr*_* W. 6

糟糕!我刚想通了.

foo: 'bar' 被评估为"标签",我没有意识到这是一个JavaScript功能.

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/label