3

私のJavascriptコンソール(Chrome)で、これを試しています:

 { 'a' : 1 }

そして得るSyntaxError: Unexpected token :

しかし、これは機能します:

 ['a', 1]

何を与える?

4

4 に答える 4

7

これは、中括弧には 2 つの用途があるためです。ブロックを導入するか、オブジェクト リテラルの開始として使用します (後者はです)。

コンソールはどちらかを判断できないため、ステートメント ブロックを想定し、後でブロックの内容をステートメントとして解析できないことがわかります。

あいまいさが存在しない角括弧を含む配列リテラルの場合。

あいまいさは、コンテキストを変更して、ステートメント ブロックではなく式として解釈する{...} 必要があるようにすることで解決できます。たとえば、演算子の RHS にする、かっこで囲む、関数パラメーターとして渡すなどの方法があります。

于 2013-06-29T16:03:14.277 に答える
3

これはブロックです:

{
    var x = 'stuff'
    function doStuff(arg) { alert(arg) }
    doStuff(x)
}

警告しstuffます。

さて、あなたの例について: JavaScript は次のようにブロックだと考えます:

{
    'a' : 1
}

'a' : 1は有効なステートメントではないため、失敗します。

する場合は注意してください

'x' + { 'a' : 1 }

ブロックが+.

于 2013-06-29T16:02:22.663 に答える
2

そのためにできることがありますnew Object({'a' : 1})

于 2013-06-29T16:03:35.340 に答える
2

他の人が指摘しているように、これは中括弧が二重に使用されるという事実によるものです。

あいまいさを回避する最も簡単な方法は、括弧のペアを追加することです。

> {'a': 1}
SyntaxError: Unexpected token :

> ({'a': 1})
Object {a: 1}
于 2013-06-29T16:04:43.980 に答える