私のJavascriptコンソール(Chrome)で、これを試しています:
{ 'a' : 1 }
そして得るSyntaxError: Unexpected token :
しかし、これは機能します:
['a', 1]
何を与える?
私のJavascriptコンソール(Chrome)で、これを試しています:
{ 'a' : 1 }
そして得るSyntaxError: Unexpected token :
しかし、これは機能します:
['a', 1]
何を与える?
これは、中括弧には 2 つの用途があるためです。ブロックを導入するか、オブジェクト リテラルの開始として使用します (後者は式です)。
コンソールはどちらかを判断できないため、ステートメント ブロックを想定し、後でブロックの内容をステートメントとして解析できないことがわかります。
あいまいさが存在しない角括弧を含む配列リテラルの場合。
あいまいさは、コンテキストを変更して、ステートメント ブロックではなく式として解釈する{...}
必要があるようにすることで解決できます。たとえば、演算子の RHS にする、かっこで囲む、関数パラメーターとして渡すなどの方法があります。
これはブロックです:
{
var x = 'stuff'
function doStuff(arg) { alert(arg) }
doStuff(x)
}
警告しstuff
ます。
さて、あなたの例について: JavaScript は次のようにブロックだと考えます:
{
'a' : 1
}
'a' : 1
は有効なステートメントではないため、失敗します。
する場合は注意してください
'x' + { 'a' : 1 }
ブロックが+
.
そのためにできることがありますnew Object({'a' : 1})
。
他の人が指摘しているように、これは中括弧が二重に使用されるという事実によるものです。
あいまいさを回避する最も簡単な方法は、括弧のペアを追加することです。
> {'a': 1}
SyntaxError: Unexpected token :
> ({'a': 1})
Object {a: 1}