最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

JavaScript?數(shù)據(jù)類型Map的用法詳解

 更新時(shí)間:2025年10月29日 17:23:19   作者:1加1等于  
本文通過(guò)實(shí)例代碼給大家介紹JavaScript數(shù)據(jù)類型Map的用法,本文結(jié)合實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友參考下吧

本文詳細(xì)介紹JavaScript高級(jí)數(shù)據(jù)類型Map的用法。

1. 基本用法

// 創(chuàng)建空Map
const map = new Map();
// 創(chuàng)建帶初始值的Map
const userMap = new Map([
  ['name', 'name'],
  [42, 'Answer'],
  [Symbol('id'), 123]
]);
// 添加鍵值對(duì)
map.set('key1', 'value1');
map.set({ objKey: 1 }, 'object value'); // 鍵可以是對(duì)象
// 獲取值
console.log(userMap.get('name')); // 'name'
console.log(map.get({ objKey: 1 })); // undefined(引用不同)
// 檢查鍵是否存在
console.log(userMap.has(42)); // true
// 刪除鍵值對(duì)
userMap.delete('name');
// 獲取大小
console.log(userMap.size); // 2
// 清空Map
map.clear();

2. 鍵的唯一性

Map 使用 SameValueZero 算法判斷鍵是否重復(fù)(與 Set 相同):

const map = new Map();
map.set(5, 'number five');
map.set('5', 'string five'); // 允許,類型不同
const obj1 = {};
const obj2 = {};
map.set(obj1, 'obj1');
map.set(obj2, 'obj2'); // 允許,引用不同
console.log(map.size); // 4

3. 迭代方法

Map 保持插入順序,并提供多種迭代方式:

const map = new Map([
  ['a', 1],
  ['b', 2]
]);
// 遍歷鍵值對(duì)
for (const [key, value] of map) {
  console.log(key, value);
}
// 遍歷鍵
for (const key of map.keys()) {
  console.log(key);
}
// 遍歷值
for (const value of map.values()) {
  console.log(value);
}
// 使用forEach
map.forEach((value, key) => {
  console.log(`${key}: ${value}`);
});

4. 對(duì)象 vs Map

特性對(duì)象 (Object)Map
鍵的類型字符串或 Symbol任意類型(對(duì)象、函數(shù)等)
順序性不保證順序(ES2015+ 字符串鍵按插入順序,但非強(qiáng)制)保持插入順序
大小需要手動(dòng)計(jì)算(如 Object.keys(obj).length直接通過(guò) size 屬性獲取
迭代需要先獲取鍵數(shù)組(如 Object.keys()直接支持 for...offorEach
默認(rèn)鍵原型鏈上的鍵(如 toString無(wú)默認(rèn)鍵
性能大量鍵值對(duì)時(shí)操作效率較低插入、刪除、查找操作更高效

5. 常用操作

// 1. 對(duì)象轉(zhuǎn)Map
const obj = { a: 1, b: 2 };
const map = new Map(Object.entries(obj));
// 2. Map轉(zhuǎn)對(duì)象
const newObj = Object.fromEntries(map); // ES2019+
// 3. 合并Map
const mergedMap = new Map([...map1, ...map2]);
// 4. 復(fù)制Map
const cloneMap = new Map(map);
// 5. 檢查是否包含所有鍵
function hasAllKeys(map, keys) {
  return keys.every(key => map.has(key));
}

6. 應(yīng)用場(chǎng)景

// 1. 緩存計(jì)算結(jié)果
const cache = new Map();
function compute(key) {
  if (cache.has(key)) {
    return cache.get(key);
  }
  const result = expensiveOperation(key);
  cache.set(key, result);
  return result;
}
// 2. 事件注冊(cè)表(鍵為元素,值為事件處理函數(shù))
const eventRegistry = new Map();
const element = document.getElementById('btn');
eventRegistry.set(element, () => { /* 處理函數(shù) */ });
// 3. 統(tǒng)計(jì)頻率
const frequencyMap = new Map();
['a', 'b', 'a', 'c'].forEach(item => {
  frequencyMap.set(item, (frequencyMap.get(item) || 0) + 1);
});
// 結(jié)果: Map { 'a' => 2, 'b' => 1, 'c' => 1 }

補(bǔ)充:Object 和 Map 的比較

MapObject
意外的鍵Map 默認(rèn)情況不包含任何鍵。只包含顯式插入的鍵一個(gè) Object 有一個(gè)原型,原型鏈上的鍵名有可能和你自己在對(duì)象上的設(shè)置的鍵名產(chǎn)生沖突(備注:雖然可以用 Object.create(null)來(lái)創(chuàng)建一個(gè)沒(méi)有原型的對(duì)象,但是這種用法不太常見(jiàn))
鍵的類型一個(gè) Map 的鍵可以是任意值,包括函數(shù)、對(duì)象或任意基本類型一個(gè) Object 的鍵必須是一個(gè) String 或是 Symbol
鍵的順序Map 中的鍵是有序的。因此,當(dāng)?shù)臅r(shí)候,一個(gè) Map 對(duì)象以插入的順序返回鍵值雖然 Object 的鍵目前是有序的,但并不總是這樣,而且這個(gè)順序是復(fù)雜的(因此,最好不要依賴屬性的順序)
SizeMap 的鍵值對(duì)個(gè)數(shù)可以輕易地通過(guò) size 屬性獲取Object 的鍵值對(duì)個(gè)數(shù)只能手動(dòng)計(jì)算
迭代Map 是可迭代的Object 沒(méi)有實(shí)現(xiàn)迭代協(xié)議,所以使用 JavaSctipt 的 for...of] 表達(dá)式并不能直接迭代對(duì)象(備注:對(duì)象可以實(shí)現(xiàn)迭代協(xié)議,或者你可以使用 Object.keys 、 Object.entriesfor...in
性能在頻繁增刪鍵值對(duì)的場(chǎng)景下表現(xiàn)更好在頻繁添加和刪除鍵值對(duì)的場(chǎng)景下未作出優(yōu)化
序列化和解析沒(méi)有元素的序列化和解析的支持ObjectJSON 的序列化使用 JSON.stringfy();由 JSONObject 的解析使用 JSON.parse()

到此這篇關(guān)于JavaScript 數(shù)據(jù)類型——Map詳解的文章就介紹到這了,更多相關(guān)js數(shù)據(jù)類型map內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

最新評(píng)論

长汀县| 客服| 明光市| 浦城县| 余姚市| 永宁县| 六盘水市| 额济纳旗| 安乡县| 梨树县| 桂阳县| 磴口县| 顺昌县| 大理市| 阿荣旗| 芜湖市| 砚山县| 乡宁县| 漳平市| 洞口县| 来宾市| 名山县| 得荣县| 赫章县| 五峰| 广饶县| 宝兴县| 吉木乃县| 东乡县| 象州县| 长葛市| 建始县| 南城县| 辽宁省| 贡山| 白银市| 沂源县| 抚远县| 崇义县| 穆棱市| 中西区|