2014年12月17日水曜日

JavaScriptまとめ2

var a = [5, 10];
alert(a.length); // → 2が表示される
a.push(15);
alert(a.length); // → 3が表示される
 
a[1000] = 500;
alert(a.length); // →1001が表示される

実際に中身を見てみると、配列の要素は4つしかないことがわかる
var tmpArray = [];
for (var key in a) {
    tmpArray.push(key);
}
// 結果は「0,1,2,1000」
alert(tmpArray.join());


結果は「0, 1, 2, 1000」
つまり、lengthの値が1001を表しているのに、実際配列に格納されている要素は4つしかない.

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

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

上の例で言えば、前者の場合1000回ループしますが、後者の場合は4回で済む
ただし、配列の添え字を飛び飛びで使用することはあまりないでしょうから、気にする状況は限られてくるでしょう。


添え字として無効なキーは、lengthに影響を与えない
配列添え字として無効なキー(2の32乗までの正数以外)を配列オブジェクトに格納しても、lengthプロパティは変化しません。

var a = [];     // lengthは0
a[0] = "aaa";   // lengthは1になる
a["1"] = "bbb"; // lengthは2になる。文字列も有効
a["a"] = "ccc"; // "a"は添え字として無効なので、lengthは変化しない






lengthプロパティは書き込みも可能

 lengthプロパティは、読み取りを行えるだけではありません。lengthプロパティに数値を代入すると、その大きさまで配列は切り詰められます。

var a = [1, 2, 3, 4];
a.length = 0;   // 空の配列になる

 配列を一定の長さに保ちたい、という場合などに役立つテクニック

○参考
 JavaScriptの配列をも〜っと深く理解する:lengthの不思議な動作
http://builder.japan.zdnet.com/script/sp_javascript-kickstart-2007/20366841/2/

0 件のコメント:

コメントを投稿