ES6 Set 和 WeakSet 有什么区别?
What's the difference between ES6 Set and WeakSet?
ECMAScript 6 有这些非常相似的集合:Set
和 WeakSet
。它们有什么区别?
主要区别在于,对 Set 中对象的引用是强引用,而对 WeakSet 中对象的引用是弱引用。这意味着如果没有其他引用.
,WeakSet 中的一个对象可以被垃圾回收。
其他差异(或副作用)是:
- 集合可以存储任何值。 WeakSet 只是对象的集合。
- WeakSet 没有 size 属性.
- WeakSet 没有 clear、keys、values、entries、forEach 方法。
- WeakSet 不可迭代。
- 集只允许存储一次。
- set中存储的元素不
有一个键或索引。所以很难使用检索元素
默认方法如 get()
- WeakSet 只接受对象作为它的值。
- 如果没有任何其他对存储对象的引用(引用是弱的),弱集不会阻止垃圾回收
集合:- 集合是值的集合,其中每个值只能出现一次。主要方法有add、delete、has、clear和size。
WeakSet:- WeakSet objects allows you to store collection of unique key.“WeakSet”键不能是原始类型。
它们也不能由数组或另一组创建。 WeakSet 的值必须是对象引用。
总结:
Weaksets 是 javascript 个包含对象集合的对象。由于集合的性质,同一对象的一个对象引用可能只出现在该集合中。弱集在以下方面与普通集不同:
- Weaksets 只能在其集合中保存对象,不允许原始值(例如
int
、boolean
、string
)。
- 对对象的引用保持弱。这意味着只要除了
WeakSet
之外没有其他指向该对象的引用,该对象就可以被垃圾收集(即 JS 引擎将释放该引用指向的对象的内存)。
示例:
let myWeakSet = new WeakSet();
let obj = {};
myWeakSet.add(obj);
console.log(myWeakSet.has(obj));
// break the last reference to the object we created earlier
obj = 5;
// false because no other references to the object which the weakset points to
// because weakset was the only object holding a reference it released it and got garbage collected
console.log(myWeakSet.has(obj));
ECMAScript 6 有这些非常相似的集合:Set
和 WeakSet
。它们有什么区别?
主要区别在于,对 Set 中对象的引用是强引用,而对 WeakSet 中对象的引用是弱引用。这意味着如果没有其他引用.
,WeakSet 中的一个对象可以被垃圾回收。其他差异(或副作用)是:
- 集合可以存储任何值。 WeakSet 只是对象的集合。
- WeakSet 没有 size 属性.
- WeakSet 没有 clear、keys、values、entries、forEach 方法。
- WeakSet 不可迭代。
- 集只允许存储一次。
- set中存储的元素不 有一个键或索引。所以很难使用检索元素 默认方法如 get()
- WeakSet 只接受对象作为它的值。
- 如果没有任何其他对存储对象的引用(引用是弱的),弱集不会阻止垃圾回收
集合:- 集合是值的集合,其中每个值只能出现一次。主要方法有add、delete、has、clear和size。
WeakSet:- WeakSet objects allows you to store collection of unique key.“WeakSet”键不能是原始类型。 它们也不能由数组或另一组创建。 WeakSet 的值必须是对象引用。
总结:
Weaksets 是 javascript 个包含对象集合的对象。由于集合的性质,同一对象的一个对象引用可能只出现在该集合中。弱集在以下方面与普通集不同:
- Weaksets 只能在其集合中保存对象,不允许原始值(例如
int
、boolean
、string
)。 - 对对象的引用保持弱。这意味着只要除了
WeakSet
之外没有其他指向该对象的引用,该对象就可以被垃圾收集(即 JS 引擎将释放该引用指向的对象的内存)。
示例:
let myWeakSet = new WeakSet();
let obj = {};
myWeakSet.add(obj);
console.log(myWeakSet.has(obj));
// break the last reference to the object we created earlier
obj = 5;
// false because no other references to the object which the weakset points to
// because weakset was the only object holding a reference it released it and got garbage collected
console.log(myWeakSet.has(obj));