js es6 map weakmap


前言

這里介紹一些map和weakmap的一些屬性和他們不同之處。

正文

map

JavaScript 的對象(Object),本質上是鍵值對的集合(Hash 結構),但是傳統上只能用字符串當作鍵。這給它的使用帶來了很大的限制.

ES6 提供了 Map 數據結構。它類似於對象,也是鍵值對的集合,但是“鍵”的范圍不限於字符串,各種類型的值(包括對象)都可以當作鍵。也就是說,Object 結構提供了“字符串—值”的對應,Map 結構提供了“值—值”的對應,是一種更完善的 Hash 結構實現。如果你需要“鍵值對”的數據結構,Map 比 Object 更合適。

const m = new Map();
const o = {p: 'Hello World'};

m.set(o, 'content')
m.get(o) // "content"

m.has(o) // true
m.delete(o) // true
m.has(o) // false

Map 也可以接受一個數組作為參數。該數組的成員是一個個表示鍵值對的數組。

const map = new Map([
  ['name', '張三'],
  ['title', 'Author']
]);

map.size // 2
map.has('name') // true
map.get('name') // "張三"
map.has('title') // true
map.get('title') // "Author"

如果對同一個鍵多次賦值,后面的值將覆蓋前面的值。

const map = new Map();
map.set(1, 'aaa').set(1, 'bbb');
map.get(1) // "bbb"

實例的屬性和操作方法:

(1)size 屬性

(2)set(key, value)

(3)get(key)

(4)has(key)

(5)delete(key)

(6)clear()

{
 let map = new Map();
map.set('foo', 11);
map.set('bar', 22);
map.size ;// 2
map.get('foo');//t1
map.has('boo');  //true
map.delete('foo');  //true
map.clear();
map.size // 0
}

遍歷方法

Map 結構原生提供三個遍歷器生成函數和一個遍歷方法。
keys():返回鍵名的遍歷器。
values():返回鍵值的遍歷器。
entries():返回所有成員的遍歷器。
forEach():遍歷 Map 的所有成員。
Map 結構的默認遍歷器接口(Symbol.iterator屬性),就是entries方法。

WeakMap

WeakMap結構與Map結構類似,也是用於生成鍵值對的集合。

WeakMap與Map的區別有兩點。

首先,WeakMap只接受對象作為鍵名(null除外),不接受其他類型的值作為鍵名。

其次,WeakMap的鍵名所指向的對象,不計入垃圾回收機制。

// WeakMap 可以使用 set 方法添加成員
const wm1 = new WeakMap();
const key = {foo: 1};
wm1.set(key, 2);
wm1.get(key) // 2

// WeakMap 也可以接受一個數組,
// 作為構造函數的參數
const k1 = [1, 2, 3];
const k2 = [4, 5, 6];
const wm2 = new WeakMap([[k1, 'foo'], [k2, 'bar']]);
wm2.get(k2) // "bar"

WeakMap 的語法

WeakMap 與 Map 在 API 上的區別主要是兩個,

一是沒有遍歷操作(即沒有keys()、values()和entries()方法),也沒有size屬性。

二是無法清空,即不支持clear方法。因此,WeakMap只有四個方法可用:get()、set()、has()、delete()。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM