[关闭]
@Wangww0925 2021-02-02T12:47:27.000000Z 字数 803 阅读 212

ES6的WeakSet数据结构

ES6


注意:WeakSet内部数据不允许重复的

weak是懒惰的意思

WeakSet可以存放对象

WeakSet的声明

WeakSet有个限制,在new的时候直接赋值,会报错,要使用add()添加才行。

  1. // let weakObj = new WeakSet({a: '123'}); // 报错 index.js:74 Uncaught TypeError: object is not iterable
  2. let weakObj = new WeakSet();
  3. let obj = { name: 'www', age: 18 };
  4. weakObj.add(obj); // weakObj必须先声明在使用add()添加
  5. console.log(weakObj);

控制台打印:
image_1dia3q8t71oih1q8aont1tmi1mv4m.png-76.8kB


WeakSet内部不允许有重复值

坑:内存空间不同,可以重复

  1. let weakObj = new WeakSet();
  2. let obj = { name: 'www', age: 18 };
  3. let obj1 = { name: 'www', age: 18 };
  4. weakObj.add(obj);
  5. weakObj.add(obj1);
  6. console.log(weakObj); // 两个不同内存空间的对象,可以重复

控制台打印:
image_1dia4706o15cvg5ud9smco7fl13.png-78.5kB

那么怎样显示不重复的特性呐?

  1. let weakObj = new WeakSet();
  2. let obj = { name: 'www', age: 18 };
  3. let obj1 = obj; // obj赋值给obj1,这样两个对象的内存空间就相同了
  4. weakObj.add(obj);
  5. weakObj.add(obj1);
  6. console.log(weakObj);

控制台打印:
image_1dia4i6gd18ar1dti3aefgd10dc1g.png-76.9kB

此时就可以看到WeakSet内部的值不重复了

总结: 在实际开发中Set用的比较多,WeakSet用的并不多,但是他对传入值必须是对象作了很好的判断,我们灵活应用还是有一定的用处的。

添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注