JavaScript 開発者は、キーと値のストレージとしてプレーン オブジェクトを頻繁に使用しますが、Map
データ構造には大きな利点があります。この記事では、Map
が動的オブジェクトを超えることが多い理由を説明します。
Map
の主な利点は、キーを文字列や記号に制限するオブジェクトとは異なり、任意のデータ型をキーとして利用できることです。
// Objects convert keys to strings const obj = {}; obj[true] = "value1"; obj[1] = "value2"; obj[{ key: 1 }] = "value3"; console.log(Object.keys(obj)); // Output: ["true", "1", "[object Object]"] // Maps preserve key types const map = new Map(); map.set(true, "value1"); map.set(1, "value2"); map.set({ key: 1 }, "value3"); console.log([...map.keys()]); // Output: [true, 1, { key: 1 }]
Map
は組み込みの size
プロパティを提供し、オブジェクトで必要な手動計算を排除します。
// Objects require manual size calculation const obj = { a: 1, b: 2, c: 3 }; const size = Object.keys(obj).length; console.log(size); // 3 // Maps offer direct size access const map = new Map([ ['a', 1], ['b', 2], ['c', 3] ]); console.log(map.size); // 3
Map
は、頻繁にキーと値のペアを追加および削除するように最適化されており、反復が高速になります。 (簡潔にするためにパフォーマンス テスト コードは省略されていますが、アサーションは引き続き有効です)。
Map
は、一般的なタスクのための直感的で専用のメソッドを提供します。 次のコード スニペットは、エントリの追加、確認、取得、削除を行うためのオブジェクトと比較して、Map
のより簡潔な構文を示しています。 (簡潔にするために Map
とオブジェクト メソッドを比較するコードは省略されています。)
Map
は、オブジェクトの使用を複雑にする可能性がある継承の問題を回避します。 (簡潔にするために、Map
にプロトタイプ チェーンの干渉がないことを示すコードは省略されています。)
Map
は、柔軟性を高めるために複数の組み込み反復メソッドを提供します。 (簡潔にするために、for...of
、map.keys()
、map.values()
、および forEach
の反復を示すコードは省略されています)。
の強みにもかかわらず、特定の状況ではオブジェクトの方が依然として好ましいです:Map
による JSON シリアル化の問題を示すコード例と、簡潔にするために回避策を省略しました)。Map
は次の場合に優れています:Map
は、その利点がプロジェクトの要件と一致する場合、強力なツールです。Map
以上がJavaScript でオブジェクトよりマップを優先すべき理由の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。