zoukankan      html  css  js  c++  java
  • Symbol数据类型、Set数据结构和Map数据结构

    symbol

    symbol函数生成的数据,表示的是独一无二的值。它是js语言的第7种数据类型,

    可用于对象的属性名,防止某个属性名被不小心改写或者覆盖,比如一些常量属性可以设置为symbol值。

    let mySymbol = Symbol();
    
    // 第一种写法
    let a = {};
    a[mySymbol] = 'Hello!';
    
    // 第二种写法
    let a = {
      [mySymbol]: 'Hello!'
    };
    
    // 第三种写法
    let a = {};
    Object.defineProperty(a, mySymbol, { value: 'Hello!' });
    
    // 以上写法都得到同样结果
    a[mySymbol] // "Hello!"

    Set和Map数据结构

    Set和Map的应用场景在于数组去重和数据存储

    Set

    根据数据结构,Set是一种叫做集合的数据结构,Map是一种叫做字典的数据结构

    set和数组的区别:除了set可以去重,set是无序的。
    1、Set数据结构类似与数组,但是成员的值都是唯一的,没有重复的值。
    1、Set可以用于数组内部去除重复成员的方法,Array.from(new Set(array))或者[...new Set(arr)](阮一峰的es6文档有使用set方法处理去除数组中重复元素)结合Array.from
    2、 Set可以用于去除字符串里面的重复字符。
    3、 Set 不可以对象的去重。因为在Set内部,有判断两个值是否相等的机制类似为===。但是NaN在Set数据结构中也不会重复
    2、Set的实例方法 操作数据和遍历的方法。
    1、操作数据: add(value)添加某个值,返回Set结构本身 delete(value)删除某个值,返回一个值,表示是否成功。
    2、 遍历方法: has(value)返回一个布尔值,表示该值是否为Set的成员。 clear()清除所有成员,没有返回值。
    3、Set结构的实例有四个遍历方法,可以用于遍历成员。Set结构的键名和键值为同一个值。
    1. keys()返回键名的遍历器。
    2. values()返回键值的遍历器。
    3. entries()返回键值对的遍历器。
    4. forEach()对每个成员执行某种操作,没有返回值。
    4、扩展运算符也可以用于Set结构。
    5、通过扩展运算符,filter,map等方法也可以用于Set结构。因此使用set结构可以很容易的实现,并集、交集、差集

    为什么会出现weakSet?

    因为js中对不再被引用的对象会被自动删除,资源也会一同被收回,Set中对象的引用都是强类型化的,并不会允许垃圾回收,为了解决这个问题,es6引入了WeakSet的弱集合,这些集合之所以是”弱的“,是因为他们允许从内存中清除不再需要的被这些集合所引用的对象。
    6、weakSet 结构和Set结构类似,也是不重复的值的集合。但是WeakSet的成员只能是对象(对象引用类型),而不能是其他类型的值。不能遍历。
    WeakSet.prototype.add(value):向 WeakSet 实例添加一个新成员。
    WeakSet.prototype.delete(value):清除 WeakSet 实例的指定成员。(这个与Set实例方法的意义稍微有些不通话)
    WeakSet.prototype.has(value):返回一个布尔值,表示某个值是否在 WeakSet 实例之中。

    Map

     
    1、Map数据结构,类似于对象,也是键值对的集合,但是”键“的范围不限于字符串,各种类型的值(包括对象)都可以当做键。Object 结构提供了“字符串—值”的对应,Map 结构提供了“值—值”的对应,是一种更完善的 Hash 结构实现。
    2、Map数据结构的实例的属性和操作方法
    1、size 属性返回Map结构的成员总数
    2、set(key,value)设置键名key对应的键值为value,然后返回整个Map结构;
    3、读取key对应的键值,如果找不到key,返回undefined;
    4、has(key)方法返回布尔值,表示某个键是否在当前Map对象中。
    5、delete(key) 方法删除某个键,返回true,如果删除失败,返回false。
    6、clear()方法清除所有的成员,没有返回值。
    Map结构的实例有四个遍历方法,可以用于遍历成员。
    1. keys()返回键名的遍历器。
    2. values()返回键值的遍历器。
    3. entries()返回所有成员的遍历器。
    4. forEach()对每个成员执行某种操作,没有返回值。
    1.Map转为数组,,最简便的方法使用扩展运算符。 数组转为Map使用Map构造函数
    2.Map转为对象,参考es6文档 使用 for ... of循环,对象转为Map,可以通过Object.entries()实现
    3.Map和Json也可以互相转换。
     

    总结:

    Set本身是一个构造函数,用来生成Set数据结构。内部有判断加入的值是否相同的机制,可用于字符串和数组的去重。
    Set数据结构类似数组,arr=[1,2,3];set={1,2,3},成员的值是唯一的。参数可以是数组和字符串。
    Map 是一个构造函数,用来生成Map数据结构,是扩展的键值对,键可以为非字符串形式的。
     
    map和obj的区别,obj的key值必须为字符窗或者是number。
  • 相关阅读:
    发短信集合类-阿里云短信涉及类
    第四方 fast快捷支付封装
    佰米支付封装
    支付宝支付封装【修改至2021.01.11】
    关于支付
    tp5下的文件上传与下载类
    发送短信集合类
    文件中设置开启访问权限
    SpringBoot注解分析
    HashMap底层实现原理及面试问题
  • 原文地址:https://www.cnblogs.com/jwenming/p/14694668.html
Copyright © 2011-2022 走看看