亚洲精品久久久中文字幕-亚洲精品久久片久久-亚洲精品久久青草-亚洲精品久久婷婷爱久久婷婷-亚洲精品久久午夜香蕉

您的位置:首頁技術文章
文章詳情頁

JavaScript WeakMap使用詳解

瀏覽:59日期:2023-10-04 13:49:03

WeakMap 對象是一組鍵/值對的集合,其中的鍵是弱引用的。其鍵必須是對象,而值可以是任意的。

語法

new WeakMap([iterable])參數

iterableIterable 是一個數組(二元數組)或者其他可迭代的且其元素是鍵值對的對象。每個鍵值對會被加到新的 WeakMap 里。null 會被當做 undefined。

描述

WeakMap 的 key 只能是 Object 類型。 原始數據類型 是不能作為 key 的(比如 Symbol)。

Why WeakMap?

在 JavaScript 里,map API 可以通過使其四個 API 方法共用兩個數組(一個存放鍵,一個存放值)來實現。給這種 map 設置值時會同時將鍵和值添加到這兩個數組的末尾。從而使得鍵和值的索引在兩個數組中相對應。當從該 map 取值的時候,需要遍歷所有的鍵,然后使用索引從存儲值的數組中檢索出相應的值。

但這樣的實現會有兩個很大的缺點,首先賦值和搜索操作都是 O(n) 的時間復雜度( n 是鍵值對的個數),因為這兩個操作都需要遍歷全部整個數組來進行匹配。另外一個缺點是可能會導致內存泄漏,因為數組會一直引用著每個鍵和值。這種引用使得垃圾回收算法不能回收處理他們,即使沒有其他任何引用存在了。

相比之下,原生的 WeakMap 持有的是每個鍵對象的“弱引用”,這意味著在沒有其他引用存在時垃圾回收能正確進行。原生 WeakMap 的結構是特殊且有效的,其用于映射的 key 只有在其沒有被回收時才是有效的。

正由于這樣的弱引用,WeakMap 的 key 是不可枚舉的 (沒有方法能給出所有的 key)。如果key 是可枚舉的話,其列表將會受垃圾回收機制的影響,從而得到不確定的結果。因此,如果你想要這種類型對象的 key 值的列表,你應該使用 Map。

基本上,如果你要往對象上添加數據,又不想干擾垃圾回收機制,就可以使用 WeakMap。

屬性 WeakMap.length

length 屬性的值為 0。

WeakMap.prototype

WeakMap 構造器的原型。 允許添加屬性到所有的 WeakMap 對象。

WeakMap 實例

所有 WeakMap 實例繼承自 WeakMap.prototype.

屬性

WeakMap.prototype.constructor返回創建WeakMap實例的原型函數。 WeakMap函數是默認的。

方法 WeakMap.prototype.delete(key)

移除key的關聯對象。執行后 WeakMap.prototype.has(key)返回false。

WeakMap.prototype.get(key)

返回key關聯對象, 或者 undefined(沒有key關聯對象時)。

WeakMap.prototype.has(key)

根據是否有key關聯對象返回一個Boolean值。

WeakMap.prototype.set(key, value)

在WeakMap中設置一組key關聯對象,返回這個 WeakMap對象。

示例使用 WeakMap

const wm1 = new WeakMap(), wm2 = new WeakMap(), wm3 = new WeakMap();const o1 = {}, o2 = function(){}, o3 = window;wm1.set(o1, 37);wm1.set(o2, 'azerty');wm2.set(o1, o2); // value可以是任意值,包括一個對象或一個函數wm2.set(o3, undefined);wm2.set(wm1, wm2); // 鍵和值可以是任意對象,甚至另外一個WeakMap對象wm1.get(o2); // 'azerty'wm2.get(o2); // undefined,wm2中沒有o2這個鍵wm2.get(o3); // undefined,值就是undefinedwm1.has(o2); // truewm2.has(o2); // falsewm2.has(o3); // true (即使值是undefined)wm3.set(o1, 37);wm3.get(o1); // 37wm1.has(o1); // truewm1.delete(o1);wm1.has(o1); // false實現一 個帶有 .clear() 方法的類 WeakMap 類

class ClearableWeakMap { constructor(init) { this._wm = new WeakMap(init) } clear() { this._wm = new WeakMap() } delete(k) { return this._wm.delete(k) } get(k) { return this._wm.get(k) } has(k) { return this._wm.has(k) } set(k, v) { this._wm.set(k, v) return this }}規范

Specification Status Comment ECMAScript 2015 (6th Edition, ECMA-262) WeakMap Standard Initial definition. ECMAScript (ECMA-262) WeakMap Living Standard

以上就是JavaScript WeakMap使用詳解的詳細內容,更多關于JavaScript WeakMap的資料請關注好吧啦網其它相關文章!

標簽: JavaScript
相關文章:
主站蜘蛛池模板: a国产| 亚洲国产成人久久一区二区三区 | 一级片一级毛片 | 艾小青亚洲专区在线播放 | 国产五区 | 综合网视频| 日本xxxⅹ色视频在线观看网站 | 香蕉国产| 热99re久久精品天堂vr | 亚洲黄色片免费看 | 欧美午夜影院 | 美国一级毛片在线观看 | 99久久精品国产高清一区二区 | 亚洲国产女人aaa毛片在线 | 韩日一级毛片 | 成人午夜又粗又硬有大 | 免费网站在线观看高清版 | 国产丝袜护土调教在线视频 | 超级乱淫片67194免费看 | 鲁丝片一区二区三区 | 黄色一级片免费 | 香蕉视频在线观看免费 | 99热久久这里只精品国产www | 国产精品亚洲精品爽爽 | 福利国产视频 | 国产闫盼盼私拍福利精品视频 | 国产精品毛片天天看片 | 九九在线精品 | 国产亚洲第一 | 国产人免费人成免费视频 | 国产一区二区免费福利片 | 国产亚洲一区二区三区在线 | 一级不卡毛片 | 午夜精品在线免费观看 | 国产精品污视频 | 精品国内一区二区三区免费视频 | 日韩不卡手机视频在线观看 | 日韩一区二区久久久久久 | 欧美成人禁片在线观看俄罗斯 | 777狠狠| 成人做爰免费视频免费看 |