とても”奇妙”なJavaScriptの配列:JavaやCとは違うのだよ

白石俊平(あゆた)
2008-02-07 11:00:00
  • このエントリーをはてなブックマークに追加

配列は単なるJavaScriptオブジェクト

 筆者はJava/Cの育ちなので、配列を見たら、正数値以外を添え字に使おうなんて思ったこともありませんでした。なので、以下のようなコードが普通に実行できたときびっくりした覚えがあります。

    var a = ["a", "b"];
    // 文字列を配列の添え字に使っている!?
    a["key"] = "dummy";

 しかし、JavaScriptオブジェクトはハッシュであり、「[ ]」演算子でプロパティを参照/代入できる、ということを知っている今ではどうでしょうか。

 そして配列もJavaScriptオブジェクトなのだ、と言うのですから、上の構文には少しも不思議な点はありません。keyという名前のプロパティに、dummyという値を代入しているだけですね。

 では逆に、以下の構文はどういう意味でしょう。

    a[0] = "aaa";

 言わんとしていることが何となくわかってきましたか?そう、この文は「0という名前のプロパティに、"aaa"という値を代入しているだけ」なのです。だから、前回の最後に紹介した、以下のようなコードは少しも不思議ではないのです。

    // 要素数3の配列を作成して・・
    var a = new Array(3);

    // 要素数を遙かに超えた位置の値を参照!
    // →"99"というキーはないので、undefinedが返るだけ
    alert(a[99]);

    // 要素数を遙かに超えた位置に値を代入!
    // →"100"というキーに"aaa"という値が対応づけられる
    a[100] = "aaa";

    // 文字列を添え字に利用!
    // →"10"というキーに"bbb"という値が対応づけられる
    a["10"] = "bbb";

    // 文字列を添え字に利用!?
    // →"白石"というキーに"ccc"という値が対応づけられる
    a["白石"] = "ccc";

    // 小数値を添え字に利用!?
    // →"1.23"というキーに"ddd"という値が対応づけられる
    a[1.23] = "ddd";

 ここで一つ注意があります。JavaScriptオブジェクトをハッシュテーブルとした場合、そのキーには数値や文字列が使用できますが、これらの型は区別されません。つまり、数値「0」というキーに文字列「"0"」でアクセスすることも、その逆も許されています。

    a[0] = "aaa";
    // 文字列"0"でアクセス
    alert(a["0"]);  // 結果は"aaa"が表示される
  • 新着記事
  • 特集
  • ブログ
このサイトでは、利用状況の把握や広告配信などのために、Cookieなどを使用してアクセスデータを取得・利用しています。 これ以降ページを遷移した場合、Cookieなどの設定や使用に同意したことになります。
Cookieなどの設定や使用の詳細、オプトアウトについては詳細をご覧ください。
[ 閉じる ]