• es6---es6新增的Bigint、Symbol数据类型,set、map数据结构


    一、BigInt

    BigInt是ES10新加的一种JavaScript数据类型,用来表示表示大于 2^53 - 1 的整数,2^53 - 1是ES10之前,JavaScript所能表示最大的数字

    1. const bigNum = BigInt(1728371927189372189739217)
    2. console.log(typeof bigNum) // bigint

    二、Symbol

    SymbolES6中新增的一种基本数据类型,它是一个函数,会返回一个Symbol类型的值,每一个Symbol函数返回的值都是唯一的,它们可以被作为对象属性的标识符。

    typeof Symbol(); // Symbol

    基本用法:使用Symbol值作为对象的key

    1. let name=Symbol() //声明一个变量,数据类型为symbol
    2. let obj={
    3. [name]:"hsq"
    4. }
    5. console.log(obj.name);// undefined
    6. console.log(obj[name]);// hsq

    注意:当我们使用变量去定义一个对象key时需要使用[ ]包裹着,否则就会被自动转化成string类型,因为属性使用变量进行定义,所以获取属性值需要使用obj[key]这种方式获取

    但是Symbol作为属性的属性不会被枚举出来

    1. let name=Symbol() //声明一个变量,数据类型为symbol
    2. let obj={
    3. [name]:"hsq",
    4. age:22
    5. }
    6. console.log(Object.keys(obj)) // [ 'age' ]
    7. for(const key in obj) {
    8. console.log(key) // age
    9. }
    10. console.log(JSON.stringify(obj)) // {"age":22}

    获取Symbol属性

    1. let name=Symbol('name') //声明一个变量,数据类型为symbol
    2. let obj={
    3. [name]:"hsq",
    4. age:22
    5. }
    6. // 方法一
    7. console.log(Object.getOwnPropertySymbols(obj)) // [ Symbol(name) ]
    8. // 方法二
    9. console.log(Reflect.ownKeys(obj)) // [ 'name', 'age', Symbol(name) ]

    应用场景:使用Symbol定义类的私有属性

    1. class Login {
    2. constructor(username, password) {
    3. const PASSWORD = Symbol()
    4. this.username = username
    5. this[PASSWORD] = password
    6. }
    7. checkPassword(pwd) { return this[PASSWORD] === pwd }
    8. }
    9. const login = new Login('123456', 'hahah')
    10. console.log(login.PASSWORD) // undefined
    11. console.log(login[PASSWORD]) // 报错

     三、set(集合)

    Set 对象(集合)类似于数组,且成员的值都是唯一的(通俗的理解:不能出现相同的元素)

    常用语法

    1. // 可不传数组
    2. const set1 = new Set()
    3. set1.add(1)
    4. set1.add(2)
    5. console.log(set1) // Set(2) { 1, 2 }
    6. // 也可传数组
    7. const set2 = new Set([1, 2, 3])
    8. // 增加元素 使用 add
    9. set2.add(4)
    10. set2.add('林三心')
    11. console.log(set2) // Set(5) { 1, 2, 3, 4, '林三心' }
    12. // 是否含有某个元素 使用 has
    13. console.log(set2.has(2)) // true
    14. // 查看长度 使用 size
    15. console.log(set2.size) // 5
    16. // 删除元素 使用 delete
    17. set2.delete(2)
    18. console.log(set2) // Set(4) { 1, 3, 4, '林三心' }

    不重复性 

    1. // 两个对象都是不同的指针,所以没法去重
    2. const set1 = new Set([1, {name: '林三心'}, 2, {name: '林三心'}])
    3. console.log(set1) // Set(4) { 1, { name: '林三心' }, 2, { name: '林三心' } }
    4. // 如果是两个对象是同一指针,则能去重
    5. const obj = {name: '林三心'}
    6. const set2 = new Set([1, obj, 2, obj])
    7. console.log(set2) // Set(3) { 1, { name: '林三心' }, 2 }
    8. 咱们都知道 NaN !== NaN,NaN是自身不等于自身的,但是在Set中他还是会被去重
    9. const set = new Set([1, NaN, 1, NaN])
    10. console.log(set) // Set(2) { 1, NaN }

     

    最常用来去重使用,去重方法有很多但是都没有它运行的快。

    1. const arr = [1, 2, 3, 4, 4, 5, 5, 66, 9, 1]
    2. // Set可利用扩展运算符转为数组哦
    3. const newArr = [...new Set(arr)]
    4. console.log(newArr) // [1, 2, 3, 4, 5, 66, 9]

    四、map

    Map 是一组键值对的结构,和 js对象类似。

    基本用法

    1. //初始化`Map`需要一个二维数组(请看 Map 数据结构),或者直接初始化一个空`Map`
    2. let map = new Map();
    3. //添加keyvalue
    4. map.set('Amy','女')
    5. map.set('liuQi','男')
    6. //是否存在key,存在返回true,反之为false
    7. map.has('Amy') //true
    8. map.has('amy') //false
    9. //根据key获取value
    10. map.get('Amy') //
    11. //删除 key为Amy的value
    12. map.delete('Amy')
    13. map.get('Amy') //undefined 删除成功

    Map对比object最大的好处就是,key不受类型限制

    1. // 定义map
    2. const map1 = new Map()
    3. // 新增键值对 使用 set(key, value)
    4. map1.set(true, 1)
    5. map1.set(1, 2)
    6. map1.set('哈哈', '嘻嘻嘻')
    7. console.log(map1) // Map(3) { true => 1, 1 => 2, '哈哈' => '嘻嘻嘻' }
    8. // 判断map是否含有某个key 使用 has(key)
    9. console.log(map1.has('哈哈')) // true
    10. // 获取map中某个key对应的value 使用 get(key)
    11. console.log(map1.get(true)) // 1
    12. // 删除map中某个键值对 使用 delete(key)
    13. map1.delete('哈哈')
    14. console.log(map1) // Map(2) { true => 1, 1 => 2 }
    15. // 定义map,也可传入键值对数组集合
    16. const map2 = new Map([[true, 1], [1, 2], ['哈哈', '嘻嘻嘻']])
    17. console.log(map2) // Map(3) { true => 1, 1 => 2, '哈哈' => '嘻嘻嘻' }

  • 相关阅读:
    论文阅读:Graphics2RAW: Mapping Computer Graphics Images to Sensor RAW Images
    GPU杂记
    Spring声明式基于注解的缓存(1-理论篇)
    【matlab】KMeans KMeans++实现手写数字聚类
    git分支
    maven_修改项目名_修改模块名_复制模块_导入模块
    Redis 分布式锁
    Windowds10安装LDAP服务器和客户端及遇到问题的整理
    Spring整合Mybatis
    【C语言从青铜到王者】第六篇·详解C指针
  • 原文地址:https://blog.csdn.net/h18377528386/article/details/127719980