国产片侵犯亲女视频播放_亚洲精品二区_在线免费国产视频_欧美精品一区二区三区在线_少妇久久久_在线观看av不卡

服務器之家:專注于服務器技術及軟件下載分享
分類導航

node.js|vue.js|jquery|angularjs|React|json|js教程|

服務器之家 - 編程語言 - JavaScript - js教程 - JavaScript WeakMap使用詳解

JavaScript WeakMap使用詳解

2022-01-17 16:57MDN js教程

這篇文章主要介紹了JavaScript WeakMap使用的詳細介紹,幫助大家更好的理解和使用JavaScript,感興趣的朋友可以了解下

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

語法

?
1
new WeakMap([iterable])

參數

iterable
Iterable 是一個數組(二元數組)或者其他可迭代的且其元素是鍵值對的對象。每個鍵值對會被加到新的 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

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
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,值就是undefined
 
wm1.has(o2); // true
wm2.has(o2); // false
wm2.has(o3); // true (即使值是undefined)
 
wm3.set(o1, 37);
wm3.get(o1); // 37
 
wm1.has(o1);  // true
wm1.delete(o1);
wm1.has(o1);  // false

實現一 個帶有 .clear() 方法的類 WeakMap 類

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
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的資料請關注服務器之家其它相關文章!

原文鏈接:https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/WeakMap

延伸 · 閱讀

精彩推薦
  • js教程前端開發之JS中編寫For循環的方法

    前端開發之JS中編寫For循環的方法

    這些年來,JavaScript 發展得如此之快。如果你之前有其他編程語言經驗的話,你可能無法相信在 JavaScript 中有4種方法可以編寫for 循環。...

    清閑的帆船先生8932021-12-24
  • js教程JavaScript實現點擊切換驗證碼及校驗

    JavaScript實現點擊切換驗證碼及校驗

    這篇文章主要為大家詳細介紹了JavaScript實現點擊切換驗證碼及校驗,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下...

    棟棟很優秀啊3822021-12-29
  • js教程Strve.js開發一個屬于自己的庫或框架

    Strve.js開發一個屬于自己的庫或框架

    Strve.js是一個可以將字符串轉換為視圖的JS庫。這里的字符串指的是模板字符串,所以你僅需要在JavaScript中開發視圖。Strve.js不僅易于上手,還便于靈活拆裝...

    前端歷劫之路5862021-12-23
  • js教程JavaScript實現下拉列表

    JavaScript實現下拉列表

    這篇文章主要為大家詳細介紹了JavaScript實現下拉列表,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下...

    編程的牛牛11702022-01-05
  • js教程js實現頭像上傳并且可預覽提交

    js實現頭像上傳并且可預覽提交

    這篇文章主要介紹了js如何實現頭像上傳并且可預覽提交,幫助大家更好的理解和使用js,感興趣的朋友可以了解下...

    harold10244102021-12-20
  • js教程JavaScript canvas實現文字時鐘

    JavaScript canvas實現文字時鐘

    這篇文章主要為大家詳細介紹了JavaScript canvas實現文字時鐘,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下...

    _Adoph6182021-12-29
  • js教程Javascript的15種數組去重方法,總有一種適合你

    Javascript的15種數組去重方法,總有一種適合你

    數組去重,一般都是在面試的時候才會碰到,一般是要求手寫數組去重方法的代碼。如果是被提問到,數組去重的方法有哪些?你能答出其中的10種,面試...

    前端微視界8992021-12-31
  • js教程JavaScript實現點擊自制菜單效果

    JavaScript實現點擊自制菜單效果

    這篇文章主要為大家詳細介紹了JavaScript實現點擊自制菜單效果,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下...

    ~噓~禁止想象~5402022-01-12
主站蜘蛛池模板: 国产午夜视频在线观看 | 精品国产在 | 国产精品剧情一区二区三区 | 久久av一区二区三区 | 少妇一级片免费看 | 在线中文一区 | 91日韩精品一区二区三区 | 国产色在线| 国内精品视频 | 国产成人精品一区二区三区视频 | 欧美高清免费 | 国产精品久久久久久久久小说 | 成人久久久久久久 | 婷婷激情五月 | www.国产精| 日本一区二区三区中文字幕 | 久久精品91 | www.成人 | 久久精品一级毛片 | 国产精品久久久久久久9999 | 狠久久| 亚洲一区中文 | 久久在线视频 | 午夜天堂精品久久久久 | 一本色道久久综合狠狠躁篇的优点 | 免费看黄色的视频 | 中文字幕在线综合 | 国产欧美一二三区在线粉嫩 | 日韩欧美精品一区二区三区 | 黄网站涩免费蜜桃网站 | 国产亚洲一区二区三区在线观看 | 国产亚洲欧美在线 | 午夜电影av | 美日韩一区 | 国产xxxx成人精品免费视频频 | 91久久国产精品 | 精品国产乱码久久久久久蜜柚 | 亚洲成人一区 | 亚洲激情视频 | 自拍偷拍专区 | 国产中文一区二区三区 |