国产成人精品久久免费动漫-国产成人精品天堂-国产成人精品区在线观看-国产成人精品日本-a级毛片无码免费真人-a级毛片毛片免费观看久潮喷

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

JavaScript WeakMap使用詳解

瀏覽:63日期: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
相關文章:
主站蜘蛛池模板: 美女被躁免费视频软件 | 在线欧美 | 精品一区二区在线欧美日韩 | 午夜爽爽性刺激一区二区视频 | 日韩国产中文字幕 | 亚洲一区在线视频 | 美女一级免费毛片 | 日韩特黄特色大片免费视频 | 欧美日韩国产在线观看一区二区三区 | 国内精品久久久久久影院老狼 | 超91在线 | 亚洲欧美另类日本久久影院 | 久久精品免费观看视频 | 久久综合久久自在自线精品自 | 国产高清免费不卡观看 | 国产成人精品.一二区 | 手机在线看片国产日韩生活片 | 日韩欧美中文字幕在线视频 | 精品成人免费一区二区在线播放 | 日本特黄乱人伦片 | 日本一区视频在线观看 | 欧美日本在线一区二区三区 | 亚洲视频在线免费 | 色综合在| 欧美一级毛片美99毛片 | 亚洲男人在线天堂 | 国产精品欧美一区二区在线看 | 国产精自产拍久久久久久蜜 | 51久久夜色精品国产 | 欧美人与zoxxxx另类9 | 国产精品免费精品自在线观看 | 一级特黄aaa大片在 一级特黄aaa大片在线观看 | 欧美成人三级大全 | 在线精品视频在线观看高清 | 男吃女下面刺激视频免费 | 欧美日韩视频精品一区二区 | 一区二区在线看 | 国产成人高清一区二区私人 | 114一级毛片免费 | 久久精品最新免费国产成人 | 最新亚洲精品国自产在线观看 |