2015-04-27 24 views
0

我意外地鍵入:爲什麼JS數組接受逗號分隔的索引?

var x = [1, 2, 3, 4]; 
console.log(x[1, 2]); //this will log 3 
console.log(x[3, 1]); //this will log 2 

原來我可以使用任何數量的用逗號分隔的索引來引用數組元素。最後一個索引總是被使用。如果最後一個索引大於數組,則結果爲undefined

爲什麼這個語法有效?

+9

語法不是在做你認爲它在做的事情。查看逗號運算符的文檔:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Comma_Operator – wrshawn

+0

@EricJ。我認爲來自user1403582的upvoted評論實際上很好地回答了這個問題。也許我把它弄錯了;我沒有在尋找規格作者的意圖。 – Jay

+0

在問這個問題之前,你爲什麼沒有閱讀規範或文檔? – Ejaz

回答

2

因爲屬性訪問括號的內容是一個表達式。在這種情況下,表達式是一系列操作數,並且計算結果爲最終操作數(在您的示例中分別爲21)。這是將被訪問的數組索引。

這與在屬性訪問括號中的表達式中使用其他運算符來動態評估將要訪問的屬性名稱基本相同。 x[x.length - 1]x[some_var * 3]