1. ホーム
  2. javascript

[解決済み] ES6におけるマップとオブジェクトの比較、いつ使うか?

2023-04-22 02:41:25

質問

参考:MDNマップ

<ブロッククオート

実行時までキーが不明な場合、また、すべてのキーが同じ型、すべての値が同じ型である場合は、オブジェクトよりもマップを使用します。 すべてのキーが同じ型であり、すべての値が同じ型である場合。

個々の要素に対して操作するロジックがある場合、オブジェクトを使用します。

質問です。

オブジェクトに対してマップを使用する場合、どのような例がありますか?特に、"実行時までキーが不明な場合はどうでしょうか?

var myMap = new Map();

var keyObj = {},
    keyFunc = function () { return 'hey'},
    keyString = "a string";

// setting the values
myMap.set(keyString, "value associated with 'a string'");
myMap.set(keyObj, "value associated with keyObj");
myMap.set(keyFunc, "value associated with keyFunc");

console.log(myMap.get(keyFunc));

どのように解決するのですか?

<ブロッククオート

オブジェクトに対してマップを使用する例として、どのようなものがありますか?

すでに1つ良い例を挙げていると思います。少なくとも Map を使う必要があります。

特に、"キーが実行時まで不明となるのはどのような場合でしょうか?"。

コンパイル時に知られていないときはいつでも。要するに、常に Map が必要なときは キーバリュー コレクション . コレクションが必要であることを示す良い指標は、コレクションから動的に値を追加したり削除したりするとき、そして特にそれらの値を事前に知らないときです(例:データベースから読み込む、ユーザーによって入力される、など)。

対照的に、オブジェクトを使用すべきなのは、コードを書いている間にオブジェクトがどのプロパティをいくつ持っているかが分かっているとき、つまりその形状が静的であるときです。Felix が言ったように、あなたが レコード . それを必要とする良い指標は、フィールドが異なるタイプを持ち、ブラケット記法を使う必要がないときです(または、ブラケット記法のプロパティ名の限られたセットを期待するとき)。