- ベストアンサー
この配列は何?
ホームページビルダーでロールオーバーのスクリプトを自動で書き出したものの一部ですが、 理解不能のところがあります。 以下がスクリプト var swImg; swImg=new Array; function HpbImgPreload() { var appVer=parseInt(navigator.appVersion); var isNC=false,isN6=false,isIE=false; if (document.all && appVer >= 4) isIE=true; else if (document.getElementById && appVer > 4) isN6=true; else if (document.layers && appVer >= 4) isNC=true; if (isNC||isN6||isIE) { if (document.images) { var imgName = HpbImgPreload.arguments[0]; var cnt; swImg[imgName] = new Array;//←ここです for (cnt = 1; cnt < HpbImgPreload.arguments.length; cnt++) { swImg[imgName][HpbImgPreload.arguments[cnt]] = new Image(); swImg[imgName][HpbImgPreload.arguments[cnt]].src = HpbImgPreload.arguments[cnt]; } } } } HpbImgPreload('_HPB_ROLLOVER1', 'rollover_n_image.gif', 'rollover_m_image.gif'); 以下がボディ <BODY> <P><A href="#" id="_HPB_ROLLOVER1" onmouseout="HpbImgSwap('_HPB_ROLLOVER1','rollover_n_image.gif');" onmouseover="HpbImgSwap('_HPB_ROLLOVER1','rollover_m_image.gif');"><IMG border="0" name="_HPB_ROLLOVER1" src="rollover_n_image.gif"></A></P> </BODY> このswImgの配列は[]の中が数値でないようですが、これは特殊な配列ですか? swImg[imgName] = new Array; どなたか初心者にも分かるように説明していただけるとありがたいです。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
こんにちは。 JavaScriptでは、配列の添字は数字である必要がありません。宣言や値を設定するときと、それを実際に使うときに同じ値を添字で指定すれば、問題なく動作します。 0からlength-1までの範囲の数字に限る方が、管理しやすいですが、添字に文字列など利用する方がわかりやすいこともあります。 たとえば、3原色を扱う配列RGBを考えた場合、RGB[0]、RGB[1]、RGB[2]の数値を添字として利用するのが分かりやすいか、RGB["red"]、RGB["green"]、RGB["blue"]の文字列を添字として利用するのが分かりやすいか、です。 文字列をキーにしたマップの代わりみたいなものと言えば分かりますでしょうか。 さて、話は元のソースに戻って、 HpbImgPreload('_HPB_ROLLOVER1', 'rollover_n_image.gif', 'rollover_m_image.gif'); の関数呼び出しによって、関数の中では、swImg['_HPB_ROLLOVER1'] = new Array;-(1) となります。 ソースは掲載されていませんが、<A>タグ内でHpbImgSwap('_HPB_ROLLOVER1','rollover_n_image.gif')を呼び出していることから、(1)で生成したswImg['_HPB_ROLLOVER1']を利用しているのでしょう。
その他の回答 (1)
- hrm_mmm
- ベストアンサー率63% (292/459)
>swImg[imgName] = new Array;//←ここです imgNameの中身が、数値じゃなくてもokなのは、No1の方の説明通り。 配列の要素に、さらに配列を宣言すると2次元配列になります。 1次元目(行)の要素ごとに2次元目(列)をつくれるので、必ずしも列の数が揃ってないものも作れます。 >swImg[imgName][HpbImgPreload.arguments[cnt]] = new Image(); これは2次元配列の各要素(swImg[][])にデータをいれています。 この方法で、さらに3次元、4次元などの配列も作れます。
お礼
何となく漠然としていましたが、この回答ですっきりしました。ありがとうございます。
お礼
早速、回答いただきましてありがとうございました。 お陰さまで、なんとなくハッシュみたいなことをしているのかなとイメージできました。 ほかに回答を用意されている方がいらっしゃるかもしれませんので締めは月曜夜くらいにさせていただきますね。