ホームページ > 記事 > ウェブフロントエンド > JavaScript オブジェクト、配列、およびハッシュ テーブル
JavaScript では、オブジェクトは実際には次のユーザー オブジェクトのようなハッシュ テーブルです:
function user(n, a) { this.name = n; this.age = a; this.toString = function() { return "Name:" + this.name + ", Age:" + this.age; } } var u = new user("tom", 18); for (var k in u) { alert('key: ' + k + ', value:' + u[k]); }
少し変更して、オブジェクトの代わりに Array オブジェクトを使用します:
var user = new Array(); user["name"]="tom"; user["age"]=18; user["toString"]=function(){ return "Name:" + this.name + ", Age:" + this.age; } alert(user.toString());
より簡単な書き方:
var u = { "name":"tom", "age":18 } u.toString = function(){return 'Name:' + this.name + ', Age:' + this.age;}; alert(u.toString());
上記のコードは次のようにすることができます。
Array オブジェクトを含むすべての JavaScript オブジェクトは、実際にはハッシュ テーブルであり、属性名はハッシュ テーブルのキーであり、属性の値はハッシュ テーブルの値です。
配列オブジェクトは、通常の意味では配列オブジェクトとは関係ありません。通常の配列は添字を介してのみ検索できますが、JavaScript の配列はハッシュ テーブルのようなキーを使用してコレクション内のオブジェクトを検索できます。
オブジェクトの「ハッシュ テーブル」に関数を値として直接割り当てることができます。
フロントエンドの時間に、Ruan Yifeng の「データ型と Json 形式」の記事を読みました。その記事では、yaml でデータを記述する場合、すべてのデータは 3 つのタイプに分類されると述べられていました。
最初のタイプはスカラー (スカラー)、 「Beijing」という単一の単語など、個別の文字列または数値。
2 番目のタイプは、「北京、東京」など、複数の関連するデータが特定の順序でまとめて配置されたもので、配列またはリストとも呼ばれます。
3 番目のタイプはマップ、キーと値のペアで、ハッシュまたは辞書とも呼ばれます (「首都: 北京」など)。
おそらくこれら 3 つのタイプについては誰もがよく知っていると思いますが、この記事で言及されている JSON の 4 つのルールは、JavaScript がデータを記述する方法を分析しているだけです:
並列データはカンマ (「,」) で区切られます。
マッピングはコロン (「:」) で表されます。
並列データのコレクション (配列) は角括弧 (「[]」) で表されます。
マップされたコレクション (オブジェクト) は中括弧 (「{}」) で表されます。
これら 4 つのルール (および機能の理解) があれば、一見「奇妙な」書き方の多くを理解できます。したがって、JavaScript オブジェクトは実際には配列またはマップです。
配列とマッピングの違いについては、次の例を参照してください:
var m = { name:"keel", age:5 } var a = [m,"sss",3]; //以下请求成功定位到name属性 alert(m["name"]); alert(a[0]["name"]);//a[0]定位到m alert(a[0].name); //以下失败 alert(m[0]);//映射无法以数组下标的方式访问
メンバーを検索する方法の観点から見ると、マッピングではメンバーの検索にキーが使用されますが、配列では添え字が使用され、マッピングでは添え字を使用してメンバーを検索することはできません。同様に、配列ではキーを使用できません (もちろん、キーはまったくありません)。
表現の観点からは、オブジェクト属性 (m.name など) と同様のメソッドを使用してマッピングにアクセスできます。キーを持つ [] メソッド (例: m["name"]、これは JavaScript の特殊なケースで、配列のように見えますが、実際にはマッピングです); ただし、配列は添字のみを使用できます。順序: 配列は順序正しく、マッピングは乱れています