3

通常我会写

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

只是想知道......编写以下内容是否有效?
它可以跨浏览器工作吗?

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

是的,它会。这个语法乍一看很奇怪,但它是完全有效的。您正在从未分配给任何东西的数组中获取位置值。

于 2013-01-08T20:19:13.097 回答
1

这是有效的。这和做的差不多

 some_func_that_returns_an_array()[7]
于 2013-01-08T20:19:35.987 回答
1

是的,数组字面量可以是成员运算符的语法上有效的左侧部分。它确实可以跨浏览器工作。

我发现这个结构是冗长语句的一个非常易读的替代方案switch,并且也将它与对象文字一起使用。

于 2013-01-08T20:43:57.640 回答