Hatena::ブログ(Diary)

gan2 の Ruby 勉強日記 このページをアンテナに追加 RSSフィード

この日記のはてなブックマーク数 PV/ 1571440 Subscribe with livedoor Reader 役立つリンク集

2008-07-04

length は配列の要素数ではなく「インデックス最大値 + 1」を表す

JavaScript配列のlengthプロパティは「配列にどれだけ値が格納されているか」を表すものではありません。結論を言うとlengthプロパティは、「インデックス最大値 + 1」を表す値で自動的に更新される特殊なプロパティなのです。

JavaScriptの配列をも〜っと深く理解する:lengthの不思議な動作 - builder by ZDNet Japan

(;・`д・´)な、なんだってー!?(`・д´・(`・д´・;)

ほんとにヘンなプロパティだなぁ。


このことから、配列の値を走査する場合は「for (var i = 0; i < a.length; i++)」とやるよりも、in演算子を用いた方が速いことが多いです。

JavaScriptの配列をも〜っと深く理解する:lengthの不思議な動作 - builder by ZDNet Japan

どれどれ。

以下のスクリプトFirebug で実行して試してみる。

var bench = function(func) {
  var start = (new Date()).getTime();
  func();
  var end   = (new Date()).getTime();
  console.log(end - start);
};

var ary = [1, 2, 3];
ary[1000000] = 4;
bench(function() {
  for (var i = 0, l = ary.length; i < l; i++) {
    ;
  }
});
bench(function() {
  for (var item in ary) {
    ;
  }
});

実行結果。

94
0

ほんとだ。

さすが 4 回のアクセス。


ただし、配列の添え字を飛び飛びで使用することはあまりないでしょうから、気にする状況は限られてくるでしょう。

JavaScriptの配列をも〜っと深く理解する:lengthの不思議な動作 - builder by ZDNet Japan

そうですね。

でもこんな面白いことが知れてよかったです。

連番で要素が入ってない配列を見かけたらこのことを思い出したい。

スパム対策のためのダミーです。もし見えても何も入力しないでください
ゲスト


画像認証

トラックバック - http://d.hatena.ne.jp/gan2/20080704/1215152190