2016-03-22 6 views
2

私は、この構文が合法であるとは知らなかったので、挑戦に対してthis answerが表示されるのに驚いた。すなわち、このようになります一部は(私はそれビット簡体字):オブジェクトリテラルのオブジェクトリテラル?

"eo"[0,g=()=>{},g(),g(),1] 

を私には、これはオブジェクトのキーにアクセスするために使用されている配列リテラルのように見えます。 JavaScriptでこれが文書化されていますか?レコードの場合は、配列の最後の値が逆参照されるように見えます。

+1

この場合、角括弧は、プロパティアクセサではなく配列リテラルとして解析されます。コンマは[コンマ演算子](https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Operators/Comma_Operator)として解析されます。 –

答えて

1

文字列のaccesscomma operatorを使用すると、基本的にoが返され、その間に何か行われます。

部品で:

"eo"      string 
    [      bracket operator/string accessor 
    0,      value 0 
     g=()=>{},   generating an empty function 
       g(),  call that function 
        g(), call that function again 
         1 take 1 as the last element of comma operator 
         ] return 'o' 
+1

他の部分は私を混乱させませんでした。私が気づいていなかった部分は、プロパティアクセサーの中のコンマ演算子の合法性だけでした。ところで、この関数は空のオブジェクトではなく、 'undefined'を返します。 –

+1

'g =()=> {}'は、呼び出し時にundefinedを返す* g *に "空の"関数を割り当てます。ゼロまたは倍数がある場合に引数を定義するのにブラケット '()'が必要と同じように本体(または複数のステートメント)がない場合、中括弧 '{}'は矢印関数の関数本体を定義する必要があります。 – RobG

関連する問題