ディメンジョンって必殺技っぽいね

そんな機能があったとは

 JavaScriptの配列変数は一次元しか使えないと思っていたのだけど、じつは多次元配列もOKであることが判明しました。
 自分で調べたんじゃなくってOpen Spaceに書いてあったんですけど。
 その方法は、例えば10*10配列ならば、以下の通り

TMP=new Array(9);
for(i=0;i<10;++i)TMP[i]=new Array(9);

...なんか見たことあるな。前回のイメージ配列と、作り方一緒じゃないですか、だいたいイメージも配列もオブジェクトとして管理されているんだから、その時点で気付けよオレ。
 でも、Open Spaceの古旗さんも気が付かなかったって書いてるし、私ごときが気が付かないのは当然ですな、はっはっは。
 で、呼び出す時はTMP[i][j]と書けばいい訳ね。丸っきりC言語だね、こりゃ。


実践あるのみ

 実際に動かしてみましょう。
 本を読んだ限りでは、配列の内容に一挙に代入できるのは最初の定義(new Arrayを使った時)の時だけのようなのだが、実際に試してみると、一通り定義した後もう一度new Arrayを使って定義しなおすことができてしまい、そのとき代入も可能になっている。
 詳しくはソースを覗いてもらうとして、ちょいと不思議だ。

 ま、ともかく二次元配列を実際に使ってみることができました。
 この調子で三次元、四次元配列もできてしまうと思うのだけど、そんな配列を使うことなど殆ど無いし、練習するのも面倒なので三次元以上の配列はやらない。


疑問がふつふつ

 配列って、new Array(n)で定義するわけだけど、nを幾つに定義しようが関係なく配列の個数が使用できてしまう。
 例えば「TMP=new Array(5);」とでも書いた後、「TMP[6]=120;」なんてことができてしまう。
 となると、この「5」はなにを定義しているのだろう???「5」メモリ領域を割り当てたってことなのか?とすると「5」より先の数を使用するのは危険なのか?
 そもそも「5」といっても「0〜5」までなのか「0〜4」までの5個なのか?
 そこで「TMP=new Array(5);」と定義して、lengthを使い配列の数を調べてみた。

 つまりは、「0〜4」までの5個が定義されているようです。
 ここらへんはとりあえず「C言語と一緒」と納得しておくことにします。
 上の「実践あるのみ」の項のスクリプトの下のほうでもlengthを調べているので、参照のこと。
 うーむ、JavaScriptの配列って奥が深い、っていうか、かなり適当に作ってあるっぽい。注意して使おう。

 今日はここまで。


[06.06.1998]