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の配列って奥が深い、っていうか、かなり適当に作ってあるっぽい。注意して使おう。
今日はここまで。