3

普通なら書くだろう

arr = ['choiceA', 'choiceB', 'choiceC', 'choiceD', 'choiceE'];
position = 3;
answer = arr[position];

ただ疑問に思っているのは...次のように書くのは有効なjavascriptですか?
クロスブラウザで動作しますか?

answer = ['choiceA', 'choiceB', 'choiceC', 'choiceD', 'choiceE'][position];
4

4 に答える 4

4

はい、 ECMAScript 5 仕様によると、次のようになります。

MemberExpression :
    PrimaryExpression
    FunctionExpression
    MemberExpression [ Expression ]
    MemberExpression . IdentifierName
    new MemberExpression Arguments

は次のようにPrimaryExpression定義されます。

PrimaryExpression :
    this 
    Identifier
    Literal
    ArrayLiteral
    ObjectLiteral
    ( Expression )

したがって、構造ArrayLiteral[Expression]は有効です。


必ずしもすべてのブラウザで動作するとは限りません (特に IE には構文の癖があります) が、動作すると想定する必要があります。

于 2013-01-08T20:23:44.487 に答える
1

はい、配列リテラルは、メンバー operatorの構文的に有効な左側の部分にすることができます。クロスブラウザで動作します。

この構文は、長いswitchステートメントに代わる非常に読みやすいものであり、オブジェクト リテラルでも使用できます。

于 2013-01-08T20:43:57.640 に答える
1

はい、そうなります。このシンタックスは一見奇妙に見えますが、完全に有効です。何にも割り当てられていない配列から位置の値を取得しています。

于 2013-01-08T20:19:13.097 に答える
1

有効です。やっていることとほとんど同じです。

 some_func_that_returns_an_array()[7]
于 2013-01-08T20:19:35.987 に答える