Amazon

2011年2月8日火曜日

JavaScriptの連想配列(ハッシュ)でハマる1

JavaScriptの連想配列。
要素数を取得するためには.lengthでは駄目。連想配列のため添え字が無効になるせいのようです
そこで、通常は連想配列に対して
for (var in hash){
       elementNum++;
}
で要素数をカウントするらしい。

【問題】
以下のコードを実行すると幾つが表示されるでしょう?

var hash = new Array();
hash["key1"] = "value1";
hash["key2"] = "value2";
var elementNum=0;
for(i in hash){
      elementNum++;
}
window.alert(elementNum);

【正解】
elementNumは2ではなく40

ここでハマった。連想配列の宣言の仕方を間違えるととんでもないことになる。
今回hashをnew Array()で宣言したため、本来配列が持っているfunction名の"clone"とか"sort"をキーに持ってしまう。なので、keyの数は40という数字になるようだ。

なるほど。だからArray.cloneとかArray.sortなど".functions"で呼び出せるんだね。結局オブジェクトは全て連想配列だと考えればいいのか。

で、正しく連想配列を宣言するときはnew Array()ではなくnew Object()のようです。

0 件のコメント:

コメントを投稿

Amazon3