異なる点
キー提出
オブジェクトでは、キーは、単純なデータ型(整数、文字列またはシンボル)である必要がありますが、マップオブジェクト要素へのキーとして使用することができ、すべてのデータ型をサポートする地図のJavaScriptであってもよいです。
要素の順序
オーダーの地図は、挿入要素の順序を次の、そしてオブジェクトはこの機能ではありません。
受け継ぎます
地図はObjectオブジェクトから継承されました。
新規インスタンス
オブジェクトは、新しいインスタンスを作成するには、以下の方法をサポートしています。
VaRの OBJ = {...}。 VAR OBJ = 新しいオブジェクト(); VAR OBJ = Object.create(NULL)。
唯一の構築の次のメソッドをサポートしている地図の表示:
VaRの地図= 新しいマップ([ 1、2 ]、[ 2、3 ])。// マップ= {1 => 2、2 => 3}
データのアクセス
地図では、地図自体のネイティブメソッドを使用することができ、要素にアクセスします:
地図。取得(1)// 2
オブジェクトはを通じてアクセス。、[]をすることができます
obj.id; OBJ [ ' ID ' ]。
要素は、地図で使用できるかどうかの決定
map.has(1)。
判決は、要素がオブジェクトで、次の操作を必要としません。
===はobj.id 未定義; // または ' ID ' で OBJ。
また、あなたが使用できるオブジェクトことにされていることに注意する()Object.prototype.hasOwnPropertyをキーが含まれていないプロトタイプチェーンのプロパティから継承されたオブジェクト自体のプロパティであるかどうかを判断します。
新データ
地図はセット()操作を使用することができます。
地図。SET(キー、値) // 値の着信キーがすでに存在する場合の前に、地図の上書き
オブジェクトのプロパティを追加で使用することができます。
OBJ [ ' キー' ] = 値; obj.key = 値; // オブジェクトが対象となります
データを削除します。
オブジェクトでネイティブ削除方法ありませんが、私たちは、次の方法を使用することができます。
obj.id削除; // これは、より効率的である以下の obj.id =未定義を
プロパティの使用は、実際には値が不定となり、オブジェクトから削除削除、および未定義の割り当てを使用することに留意すべきです。まだ通過するための...で...使用することを意味し、オブジェクト、上のプロパティは、それはまだプロパティにアクセスする必要があります。
マップの要素を削除するには、ネイティブの削除方法があります。
VAR isDeleteSucceeded = map.delete(1 )。 console.log(isDeleteSucceeded)。// 真 // 全部删除 map.clear();
サイズを取得します。
地図のサイズは、独自の属性があり、それは自分自身を維持するために、サイズを変更することができます。
オブジェクトがによって必要とされるObject.keys()が計算されます。
console.log(Object.keys(OBJ).LENGTH)。
反復処理
地図自体は、オブジェクトがサポートされていない、反復をサポートしています。
どのタイプを決定するためには、それの繰り返しをサポートしていませんか?あなたは、次のメソッドを使用することができます。
console.log(typeof演算 OBJ [Symbol.iterator])。// 未定義 にconsole.log(typeof演算用マップ[Symbol.iterator])。// 機能
オブジェクトを使用する際に、地図を使用する場合?
多くの場合、マップオブジェクトよりも良いが、ほとんどのJavaScriptの基本データ型としてものの、使用目的のために、より適した多くのシナリオが残っています。
- あなたは、単純なデータ型を保存したい場合は、およびオブジェクトモードは、文字変数を作成するために使用することができるので、キーは、より効率的な時間の文字列または整数または記号、オブジェクトの優先使用されています。
- 別のロジックの属性または要素にアクセスする必要性は、例えば、オブジェクトを使用しなければならない場合。
VAR OBJ = { ID:1 、 名前:" それは私です!" 、 印刷:機能(){ リターン `オブジェクトID:$ { この名前を持つ.ID}、$ { この.nameの}`; } } にconsole.log(obj.print())。// オブジェクトID:1、名前を持つ:それは私です。 // 以上操作不能用地図实现
- JSONは、オブジェクトを直接サポートしていますが、地図をサポートしていません。
- 地図は、純粋なハッシュですが、いくつかの他のオブジェクトの固有のロジックがありますので、削除の実装では、パフォーマンス上の問題があるでしょう。ですから、地図を使用する必要があり、集中ケースを削除して書きます。
- 地図は、挿入のために、要素の順序を維持しますが、オブジェクトはできません。
- 性能が良好である場合にストレージ内の多数の要素をマッピングする、特に場合にはコード実行中のキーの種類を判別することができません。