2017-10-04 7 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は構文上合法でなければならないと考えています。本当にそうです。

JavaScriptでコロンを使用するたびにカバーすると思われるa questionがありますが、これについては言及していませんし、回答もありません。

+1

ラベルであることを確認してください。 'foo'はあなたが壊れるループではないので、あなたは' break 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

私が意味する "問題"によって、クロムはおそらくこれを捨てるべきではありません。もしそれが法的な構文ならば、 – user907860

関連する問題