2013-01-08 53 views
3

通常我會寫它是正確的javascript方括號後用右括號括起來嗎?

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

只是想知道... 它是有效的JavaScript寫以下?
它會跨瀏覽器工作嗎?

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

當然,你嘗試過嗎? –

+0

這在大多數其他語言中也是可以的,這些語言具有數組作爲第一類值(Python浮現) – hugomg

+1

@missingno它在5.5之前的PHP中不起作用 –

回答

1

是的,它會的。這首sintax看起來很怪異,但它完全有效。您正在從未分配給任何內容的數組中獲取位置值。

+0

奇怪?我一直用它 – Bergi

+0

@Bergi:11年前,當我開始編程時,這種sintax對我來說很奇怪:) – davidbuzatto

1

它是有效的。這幾乎是一樣做

some_func_that_returns_an_array()[7] 
4

是的,根據ECMAScript 5 specification

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

其中PrimaryExpression is defined as

PrimaryExpression : 
    this 
    Identifier 
    Literal 
    ArrayLiteral 
    ObjectLiteral 
    (Expression) 

所以該構造ArrayLiteral[Expression]是有效的。


這並不一定意味着它工作在每一個瀏覽器(IE特別是有某種語法怪癖),但你應該承擔它。

+0

我向第一個發佈的人發佈了答案,但是感謝您提供了豐富的答案和參考。到目前爲止,我已經測試過iOS5 iPad,ie9,ie8模擬器,ie7模擬器,並且它可以在這些模擬器上工作 – PrimeLens

1

是的,數組文字可以是member operator的句法上有效的左邊部分。它可以跨瀏覽器工作。

我發現這個構造是一個很長的switch語句的一個非常可讀的替代方案,並且還將其與對象文字一起使用。