这个 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
。
我很抱歉发布了一个 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
。