前言
随着前端技术的发展,ES6作为一种新的规范,已经成为前端开发者必须学习的内容之一。其中,WeakMap和WeakSet 对象是ES6新增的两种对象类型,本文将详细介绍这两种对象的特点、用法和实际应用,希望能对大家有所帮助。
ES6 引入的 WeakMap 对象
1. 基本概念
WeakMap与Map的 API 类似,但有一些区别。首先,WeakMap 的 key 值只接受对象,不接受原始类型的值(例如字符串、数字、布尔等)。其次,WeakMap中的对象是弱引用,这意味着当对象的引用被删除时,该对象也会自动从WeakMap中移除。
2. 特点
- key只支持对象类型,不支持原始类型。
- 对象为弱引用,当引用被删除时,该对象也会自动从WeakMap中移除。
- WeakMap没有iterable(可迭代的)方法,因此不能被循环迭代。
3. 用法
WeakMap对象可以用于存储和访问对象的私有变量和私有方法。在代码实现中,我们可以通过闭包的形式,将对象的私有属性和方法存储在WeakMap中。这样就可以保护这些私有属性和方法,防止被外部访问。下面是一段示例代码:
-- -------------------- ---- ------- ----- ----------- - --- ---------- ----- ------- - ------------- - --------------------- - ---------------- ---------- --------------- - ----------------- -- ------- --------- -- --- - -------------------- - ------ -------------------------------------- - ------------------------- - ------------------------------------- - ------ - ------------------- - -------------------------------------- - - --- --- - --- ---------- -------------------------------------- -- --- ------- --------------------------- ---------- -------------------------------------- -- --- --- ------- ------------------------ -- --- ---- -- ------- ------
在这段代码中,我们使用WeakMap对象的set()和get()方法来存储和获取对象的私有属性和方法。
ES6 引入的 WeakSet 对象
1. 基本概念
WeakSet是一种集合,只能存放对象,并且是弱引用。与WeakMap的不同之处在于,WeakSet中没有重复元素。每个对象只能出现一次。
2. 特点
- 只能存放对象类型,不支持原始类型。
- 对象为弱引用,当引用被删除时,该对象也会自动从WeakSet中移除。
- 没有iterable(可迭代的)方法,因此不能被循环迭代。
3. 用法
WeakSet对象可以用于存储一组对象,并且每个对象只能出现一次。在代码实现中,我们可以使用WeakSet对象来实现对象的去重。下面是一段示例代码:
-- -------------------- ---- ------- ----- ------- - --- ---------- ----- ---- - ------ ----- ---- - ------ ----- ---- - ------ ------------------ ------------------ ------------------ ------------------ -- ----------- ------------------------------- -- --- ---- ------------------------------- -- --- ---- ------------------------------- -- --- ---- --------------------- -- --------------- ------------------------------- -- --- -----
在这段代码中,我们使用WeakSet对象的add()、has()和delete()方法来实现对象的去重以及获取和删除对象。
总结
WeakMap和WeakSet是ES6新增的两种对象类型,它们的特点都是对象为弱引用,当引用被删除时,该对象也会自动从WeakMap或WeakSet中移除。这使得 WeakMap 和 WeakSet 在某些场景下具有一些特殊的用途和优点。例如,可以用 WeakMap 对象来存储和访问对象的私有变量和私有方法,并用 WeakSet 对象来实现对象的去重。掌握了它们的用法,可以在实际开发中跑得更快,写得更好。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/65b31c45add4f0e0ffc2d57b