2017-10-04 29 views
1

我很抱歉发布一个重复的问题,(我知道,这里有一堆类似的题目问题),但没有任何已经存在的问题似乎适合我的案例。冒号在这个JavaScript代码片段(而不是对象文本)中意味着什么?

总之,什么是结肠在这里做的:

<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

很确定它是一个标签。我怀疑你用'break foo;'得到了这个错误,因为'foo'不是一个你可以打破的循环。 – Andy

+1

为什么downvote?一个人不知道箭头功能,他试图理解,问一个干净的问题,并得到明确的答案。 – DanteTheSmith

回答

3

如果你已经进一步阅读了你链接的页面,你会明白为什么它是这样写的。

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

这是试图从箭头函数返回一个对象。

这并不为工作原因这里解释:

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)

,返回的值需要被包裹在括号:

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

要真正回答你的问题:

这是一个标签。

你不能像foo: 1那样脱离上下文。

+0

虽然在发布问题之后,我实际上还是会阅读它。是的,它可能是一个标签,因为Firefox不会抛弃它。可能它只是一些Chrome特定的问题。 – user907860

+1

_“是的,这可能是一个标签”_否,不是“可能”。它是一个标签。 ;-)这不是一个“问题”。这是按预期工作的。 – Cerbrus

+0

由“问题”我的意思是说,Chrome可能不应该抛出这个,如果它是一个合法的语法 – user907860

相关问题