中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

es6 map是不是引用類型

發布時間:2023-01-13 14:25:13 來源:億速云 閱讀:92 作者:iii 欄目:web開發

本篇內容主要講解“es6 map是不是引用類型”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓小編來帶大家學習“es6 map是不是引用類型”吧!

map是引用類型;map(集合)是es6新增的一種引用數據類型,表示數據的映射關系。map集合數據類型中數據是以“鍵/值”的方式存儲的,可以使用對象的屬性作為鍵,使用屬性來引用值;map可以使用new來創建,例“const myMap = new Map();”。

map是引用類型。

es6 map

在ES6之前,在JavaScript中實現‘鍵’=>‘值’,也就是我們常說的鍵值對,是用Object來完成的。但這種實現方式在特殊場景下的有問題的,ES6又出了一個為Map的新集合類型,為這門語言帶來正真的鍵值對存儲機制。

map(集合)是es6新增的一種引用數據類型,表示數據的映射關系;map集合數據類型中數據是以“鍵/值”的方式存儲的,可以使用對象的屬性作為鍵,使用屬性來引用值。

1-1 創建Map

使用new關鍵字來實例一個map

let m = new Map();

console.log(m);
// Map(0) {}

創建時初始化:
傳入一個二維數組參數(可迭代對象,內部以數組的方式傳入鍵值)
每個子數組,第一個元素是map對應的key, 第二個元素是map對應的value

let m = new Map([[{}, 222], [{}, '123']]);

console.log(m);
// Map(2) { {} => 222, {} => '123' }

1-2 Map Api

1-2-1 添加映射元素

通過set()方法添加,傳入兩個參數,第一個傳入映射的鍵,第二個傳入映射的值。返回的是該映射集合(意味著可以鏈式添加)

let m = new Map();

m.set('prop', '值');

console.log(m);
// Map(1) { 'prop' => '值' }

鏈式添加鍵值

let m = new Map();

m.set('prop', '值').set('prop2', false).set('num', {id: 13});

console.log(m);
// Map(3) { 'prop' => '值', 'prop2' => false, 'num' => { id: 13 } }

1-2-2 映射集合長度

使用size屬性可以獲取到當前集合元素數量

let m = new Map();

m.set('prop', '值').set('prop2', false).set('num', {id: 13});

console.log(m.size);

1-2-3 獲取元素

通過get()方法獲取到元素,傳入獲取目標的key

let m = new Map();

m.set('prop', '值').set('prop2', false).set('num', {id: 13});

console.log(m.get('prop2'));
// false

1-2-4 刪除元素

通過delete()方法刪除映射集合中的某個元素,返回刪除成功或失敗的布爾值

let m = new Map();

m.set('prop', '值').set('prop2', false).set('num', {id: 13});

m.delete('prop2');
// true

console.log(m.get('prop2'), m.size);
// undefined 2

1-2-5 檢測元素是否存在

使用has()方法檢測目標元素是否存在,返回檢測結果的布爾值

let m = new Map();

m.set('prop', '值').set('prop2', false).set('num', {id: 13});

m.delete('prop2');
// true

console.log(m.has('prop2'), m.has('num'));
// false  true

1-2-6 清除元素方法

使用clear()方法可以清除所有的元素, 返回清除成功的布爾值

let m = new Map();

m.set('prop', '值').set('prop2', false).set('num', {id: 13});

m.clear();
// true

console.log(m);
// Map(0) {}

1-3 順序與迭代

map可以根據插入順序迭代元素
映射實例會提供(iterator).能夠以插入的順序生成[key, value]形式的數組, 可以通過entries()方法(或者提供的Symbol.iterator)迭代器接口遍歷。

let m = new Map();

m.set('prop', '值').set('prop2', false).set('num', {id: 13});

console.log(m.entries === m[Symbol.iterator]);// true

for(let k1 of m.entries()){
    console.log(k1);
    // [ 'prop', '值' ]
    // [ 'prop2', false ]
    // [ 'num', { id: 13 } ]
    // 遍歷的屬性即對應映射元素的鍵值對數組
}

for(let k2 of m.keys()){
    console.log(k2);
    // prop
    // prop2
    // num
    // 遍歷的屬性對應映射元素的鍵
}

for(let k3 of m.values()){
    console.log(k3);
    // 值
    // false
    // { id: 13 }
    // 遍歷的屬性對應映射元素的值
}

for(let k4 of m[Symbol.iterator]()){
    console.log(k4);
    // [ 'prop', '值' ]
    // [ 'prop2', false ]
    // [ 'num', { id: 13 } ]
    // 遍歷的屬性即對應映射元素的鍵值對數組
}

1-4 與Object對比

  • 內存占用

    瀏覽器的差異會導致兩種存儲方式占用的內存占用所不同,不過在給定內存大小的情況下,map比Object多存儲大約50%的鍵值對

  • 插入性能

    插入速度上面 map 和 Object性能大致相同, 但是如果代碼涉及大量的插入,建議使用map

  • 查找速度

    差異較小,只包含少量鍵值對的情況下Object更好

  • 刪除性能

    Object 的delete()性能較差,而map的刪除delete()性能好,如果數據涉及到大量的刪除操作,建議使用map

到此,相信大家對“es6 map是不是引用類型”有了更深的了解,不妨來實際操作一番吧!這里是億速云網站,更多相關內容可以進入相關頻道進行查詢,關注我們,繼續學習!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

平阳县| 班戈县| 沅陵县| 新巴尔虎右旗| 浙江省| 连江县| 岐山县| 宜城市| 雷山县| 南宁市| 江陵县| 忻州市| 长白| 广南县| 崇仁县| 广德县| 泰和县| 阿尔山市| 天峻县| 古田县| 那坡县| 达尔| 湖州市| 永新县| 精河县| 普兰店市| 郧西县| 嵩明县| 临泽县| 衢州市| 宜宾县| 玉林市| 仁寿县| 米林县| 抚宁县| 北川| 辛集市| 徐汇区| 定远县| 固阳县| 商都县|