2007-02-02
■[javascript] JavaScript の配列と連想配列の違い
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';
この 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 プロパティだからだ。基本すべてのプロパティは走査される。
配列は素直に for
var array = ['hoge', 'fuga']; for (var i = 0; i < array.length; i ++) { alert(array[i]); }
連想配列には for in
var hash = { hoge: 'hoge', fuga: 'fuga' } for (var i in hash) { alert(hash[i]); }
こんな感じでどうでしょう。
以上、おせっかいエントリーでした><
- http://d.hatena.ne.jp/seiunsky/20070202
- http://d.hatena.ne.jp/suiginto/20070203
- http://d.hatena.ne.jp/takadeko/20070204
- JavaScriptの基礎
- http://d.hatena.ne.jp/favorite-freak/20070612
- http://d.hatena.ne.jp/seiunsky/20070621
- Computer Science勉強日記 - 配列と連想配列
- type2 - 配列の走査について
- お仕事メモ - for inって
- suusukeの日記 - 配列の走査について
- 悪サンタのJLAMP TIPS - Javascript TIPS No.16 配列の中身を全て取...
- プログラミングノート - link_to_remoteとJSON
- slowbirds.d.hatena - javascript study 03
- 323 http://reader.livedoor.com/reader/
- 240 http://d.hatena.ne.jp/
- 211 http://b.hatena.ne.jp/
- 181 http://b.hatena.ne.jp/hotentry
- 181 http://blog.livedoor.jp/dankogai/archives/50754803.html
- 101 http://b.hatena.ne.jp/entrylist?sort=hot
- 93 http://www.google.co.jp/ig?hl=ja
- 49 http://www.google.com/reader/view/
- 40 http://blog.livedoor.jp/dankogai/
- 40 http://www.google.co.jp/search?sourceid=navclient-ff&ie=UTF-8&rls=GGGL,GGGL:2006-42,GGGL:ja&q=FireBug