【ES6】Set和Map数据结构

Set和Map数据结构

  • Set
    • set基本用法
    • 实例属性和方法
  • WeakSet
    • 含义
    • 语法
  • Map
    • 基本用法
    • 实例属性和方法
    • 与其他数据结构的互相转换
  • WeakMap
    • 含义
    • 语法

这是es6新增的数据结构,在面试中常被问到区别,以及与object进行比较。下面参考ES6标准入门进行梳理总结。

Set

ES6 提供了新的数据结构一-Set 它类似于数组,但是成员的值都是唯一的,没有重复

Set 本身是一个构造函数,用来生成 Set 数据结构

const s =new Set() ; 
[2, 3 , 5 , 4 , 5 , 2 , 2] .forEach(x => s . add(x)) ; 
for (let i of s) { 
console.log(i); 
}
// 2 3 5 4

set基本用法

Set 函数可以接受一个数组(或者具有 iterable 接口的其他数据结构)作为参数,用来初始化。

const set = new Set ( [1, 2 , 3 , 4, 4]); 
[ .. . set]//[1,2,3,4],解构数组并在数组里

Set 内部判断两个值是否相同时使用的算法 Same-value equality 它类似于精确相等运算符(===) 要的区别是 NaN 等于自身 而精确相等运算符认为 NaN 不等于自身

实例属性和方法

Set 结构的实例有以下属性。

  • Set. prototype. constructor 构造函数,默认就是 Set 函数。
  • Set . prototype . size :返回 Set 例的成员总数

SetSet 实例的方法分为两大类:操作方法(用于操作数据〉和遍历方法(用于遍历成员〉。

4个操作方法
• add (value ):添加某个值,返回 Set 结构本身。
• delete(value ):删除某个值,返回一个布尔值,表示删除是否成功。
• has (va lue ):返回 个布尔值,表示参数是否为 Se 的成员。
• clear (): 清除所有成员,没有返回值。

Array.from 方法可以将 Set 结构转为数组。

const items= new Set([l, 2, 3, 4, 5]); 
const array= Array.from(items) ;

4个遍历方法

  • keys 返回键名的遍历器。
  • va lues ():返回键值的遍历器
  • entries ():返回键值对的遍历器
  • forEach ():使用回调函数遍历每个成员

WeakSet

含义

WeakSet 结构与 Set 类似,也是不重复的值的集合 但是,它与 Set 有两个区别

  • WeakSet 的成员只能是对象,而不能是其他类型的值
  • WeakSet 中的对象都是弱引用

即垃坡回收机制不考虑 WeakSet 对该对象的引用,也就是说,如果其他对象都不再引用该对象,那么垃圾回收机制会自动回收该对象所占用的内存,不考虑该对象是否还存在于 WeakSet 之中

因此,WeakSet 适合临时存放 组对象,以及存放跟对象绑定的信息。只要这些对象在外部消失,它WeakSet 里面的引用就会自动消失。

因此 ES6 规定 WeakSet 不可遍历

WeakSet 不能遍历,因为成员都是弱引用,随时可能消失,遍历机制无法保证成员存在,很可能刚刚遍历结束,成员就取不到了。

语法

WeakSet 个构造函数,可以使用 new 命令创建 WeakSet 数据结构
const ws =new WeakSet();

Map

JavaScript 的对象( Object )本质上是键值对的集合( Hash 结构),但是只能用字符串作为键。这给它的使用带来了很大的限制。

**object与Map有什么区别!**特别爱考在面试中。

为了解决这个问题, 提供了 Map 数据结构。它类 于对象,也是键值对的集合,但是“键”的范围不限于字符串,各种类型的值(包括对象)都可以当作键。 就是说, Obje构提供了“字符串 值”的对应, Map 结构提供了 值一值” 对应,是 种更完善的 Hash结构实现。如果需要“键值对”的数据结构 Map Object 更合适。

基本用法

实例属性和方法

  • size 属性
  • set(key, value)
  • get( key)
  • has(key)
  • delete( key)
  • clear()

遍历方法
• keys ():返回键名的遍历器
• values ():返回键值的遍历器
• entries (): 返回所有成员的遍历器。
• forEach ():遍历 Map 的所有成员

与其他数据结构的互相转换

WeakMap

含义

WeakMap 结构与 Map 结构类似,也用于生成键值对的集合。

WeakMap Map 的区别有以下两点

  • 第一, WeakMap 只接受对象作为键名( null 除外),不接受其他类型的值作为键名。
  • 第二, WeakMap 的键名所指向的对象不计入垃圾回收机制。

WeakMap 的设计目的在于,有时我们想在某个对象上面存放一些数据,但是这会形成对这个对象的引用,一旦不再需要这两个对象 我们必须手动删除这个引用 否则垃圾回收机制就不会释放 。

一旦忘了写 就会造成 存泄漏

weakmap就是为了解决这个 题而诞生的 它的键名所引用的对象都是弱引用,即垃圾回收机制不将该引用考虑在内。因 ,只要所引用的对象的其他引用都被清除 垃圾回收机制就会释放该对象所占用的 就是说,一 旦不再需要, Weak.Map 里面的键名对象和所对应的
键值对会自动消失 不用手动 除引用。

语法

一是没有遍历操作( 没有 key ()、 values ()
entries ()方法),也没有 size 属性

二是无法清空,即不支持 cl ear 方法。因此, WeakMap 只有 个方法可用: get ()、 set ()、 has ()、delete ()

你可能感兴趣的:(es6,数据结构,前端)