最近書くネタがなかったのでTwitterから転載。
Array型に対して添字を文字列にするなんて言語道断かと思いましたが、どっちも対して変わらないんですね。
["a","b"][0] // "a" ["a","b"]["0"] // "a"二つの方法で参照することが出来ます。
何故こういうことが出来るかというと、JavaScriptでは配列もオブジェクトとして扱うからなんだと思います。
あってるんじゃないかなあ。「プロパティ名P(文字列値形式)は、ToString(ToUint32(P))とPが等しく、かつToUint32(P)と232-1が等しくない場合、配列のインデックスであり」とのこと。 http://bit.ly/cJjdJv
さらに言うと[]演算子の中身はExpressionかidentifier stringで、[0]だと前者で["0"]だと後者。前者の場合は、疑似コードによればToStringを噛まされるので、結局"0"へアクセス。 http://bit.ly/c3pp7v
ちょっと嘘ついた。["0"]でアクセスした時もIdentifierのフォーマットを満たしてないのでExpressionとして評価されると思う。
ということは、あくまで[]演算子の中身は文字列リテラルであるべきっていうのがjsの考えですか?オブジェクトリテラルの書き方を見れば数値も識別子に出来たと思ったんですが。
PropertyNameがNumericLiteralの場合の評価方法を読むとこいつもToString噛まされているので、文字列と言っていいでしょう。 http://bit.ly/dx0I5v