Pixel Pedals of Tomakomai

北海道苫小牧市出身の初老の日常

Re: 配列参照について

最近書くネタがなかったのでTwitterから転載。

Array型に対して添字を文字列にするなんて言語道断かと思いましたが、どっちも対して変わらないんですね。

["a","b"][0] // "a"
["a","b"]["0"] // "a"

二つの方法で参照することが出来ます。

何故こういうことが出来るかというと、JavaScriptでは配列もオブジェクトとして扱うからなんだと思います。

配列参照について - namusya関白

あってるんじゃないかなあ。「プロパティ名P(文字列値形式)は、ToString(ToUint32(P))とPが等しく、かつToUint32(P)と232-1が等しくない場合、配列のインデックスであり」とのこと。 http://bit.ly/cJjdJv

hiratara

さらに言うと[]演算子の中身はExpressionかidentifier stringで、[0]だと前者で["0"]だと後者。前者の場合は、疑似コードによればToStringを噛まされるので、結局"0"へアクセス。 http://bit.ly/c3pp7v

hiratara

ちょっと嘘ついた。["0"]でアクセスした時もIdentifierのフォーマットを満たしてないのでExpressionとして評価されると思う。

hiratara

ということは、あくまで[]演算子の中身は文字列リテラルであるべきっていうのがjsの考えですか?オブジェクトリテラルの書き方を見れば数値も識別子に出来たと思ったんですが。

namusyaka

PropertyNameがNumericLiteralの場合の評価方法を読むとこいつもToString噛まされているので、文字列と言っていいでしょう。 http://bit.ly/dx0I5v

hiratara