id:cheesepie:20070131:1170172709
最近は、こういう風に JavaScript を勉強する人が増えていてとても嬉しいです ^^ id:cheesepie さん頑張ってください!
で、ちょっと配列と連想配列の使いかたが違うようなので、エントリーを書こうと思いました。おせっかいだったらすみません>< ! やっぱり、このへんが JavaScript の難しいところのひとつなのだろうか。
ということで、 JavaScript の配列と連想配列の違い
いってみよおー
連想配列とは
JavaScript では連想配列は一番シンプルなオブジェクトのことである。つまり、すべてのオブジェクトは連想配列である。
以下のすべての連想配列はまったく同じものである。
// 1 var obj = { hoge: 'hoge' }; // 2 var obj = { 'hoge': 'hoge' }; // 3 var obj = {}; obj.hoge = 'hoge'; // 4 var obj = {}; obj['hoge'] = 'hoge'; // 5 var obj = new Object(); obj.hoge = 'hoge';
配列とは
配列プロトタイプを継承したオブジェクトのことである。
以下のすべては同じ配列である。
// 1 var array = ['hoge', 'fuga']; // 2 var array = new Array('hoge', 'fuga'); // 3 var array = Array('hoge', 'fuga'); // 4 var array = []; array[0] = 'hoge'; array[1] = 'fuga'; // 5 var array = []; array['0'] = 'hoge' array['1'] = 'hoge' // 6 var array = { 0: 'hoge', 1: 'fuga', length: 2 }; array.__proto__ = Array.prototype;
6 の例が分かれば、 JavaScript の配列は分かったも同然である。
走査のしかた
for in は配列走査のための記法ではない
for in は配列の走査の目的では使ってはいけない。たとえば、以下のようにプロトタイプが拡張された場合に対応出来なくなってしまう。
Array.prototype.hoge = function() {}; for (var i in ['a', 'b', 'c']) { alert(i); // 1, 2, 3, hoge が表示される }
for in はオブジェクトのプロパティを走査する記法だからだ。
では、 length プロパティは何故走査されないか。それは、 length が特別な DontEnum プロパティだからだ。基本すべてのプロパティは走査される。
こんな感じでどうでしょう。
以上、おせっかいエントリーでした><