ECMAScript 6有这些非常相似的集合:Set
和WeakSet
。他们之间有什么区别?
答案 0 :(得分:10)
主要区别在于对Set中对象的引用很强,而对WeakSet中对象的引用很弱。这意味着如果没有其它引用,WeakSet中的对象可以被垃圾收集。
其他差异(或更确切地说是副作用)是:
答案 1 :(得分:2)
设置: - Set是值的集合,其中每个值只能出现一次。主要方法有add,delete,has,clear和size。
WeakSet: - WeakSet对象允许您存储唯一键的集合。“ WeakSet ”键不能是原始类型。 它们也不能由数组或其他集创建。 WeakSet的值必须是对象引用。
答案 2 :(得分:2)
弱集是javascript对象,其中包含对象的集合。由于集合的性质,在该集合内只能出现同一对象的一个对象引用。弱集在以下方面与正常集不同:
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));
答案 3 :(得分:0)