ES6(10)、新增的数据类型

作者: 飞天小猪_pig | 来源:发表于2022-04-15 10:32 被阅读0次

    目前JS基本数据类型有:字符串类型(String)、数字类型(Number)、布尔类型(Boolean)、对空类型(Null)、未定义类型(Undefined)、符号类型(Symbol)、大整数类型(BigInt)、对象类型(Object)共八种。

    这里主要讲一下有哪些是ES6新增的数据类型:

    1、Symbol类型,基本类型其中一种。

    (1)、Symbol类型可以进行全局的symbol注册,且类似于内建对象类,但作为构造函数来说它并不完整,因为它不支持语法:"new Symbol()"。

    (2)、每个从Symbol()返回的symbol值都是唯一的。一个symbol值能作为对象属性的标识符,这是该数据类型仅有的目的。


    1.png

    (3)、Symbol()可以作为对象的key存在


    3.png

    (4)、当Symbol()可以作为对象的key存在时候,对应value将作为隐藏属性被隐藏起来,不能被外部读取


    4.png
    2、ES6新增类型还有:Set类型、Map类型、weakSet类型、WeakMap类型、TypedArray类型。只不过这几个类型都不是属于基本数据类型,都是Object类型的细分。

    1、set类型:Set 对象允许你存储任何类型的唯一值,无论是原始值或者是对象引用。(典型代表数组去重)

    ES6之前数组去重:

    var a=[1,2,3,2,3,4,5,4]
    
    function uniq(array){
      var result=[]
      var hash={}
      for(let i=0;i<array.length;i++){
        hash[array[i]]=true
      }
      for(let key in hash){
        result.push(key)
      }
      return result
    }
    console.log(uniq(a)) //打印出:[1,2,3,4,5]
    

    这种方法是不完美的数组去重,首先是不能识别字符串和数字区别如1'1'只能打印出一个出来,其次是对于对象也是只能识别成字符[object,object]等形式,不是我们想要的对象内容。

    ES6中的Set类型能解决上面问题:

    var a=[1,2,3,2,1,'4',5,4,{name:'xiaoming'}]
    
    function uniq(array){
      return Array.from(new Set(array))
    }
    console.log(uniq(a)) //打印出: [1, 2, 3, '4', 5, 4, {name:xiaoming}]
    

    2、Map类型:对象保存键值对,并且能够记住键的原始插入顺序。任何值(对象或者原始值都可以作为一个键或一个值。

    (1)、普通object对象的key只能以字符串或者Symbol形式存在,如何我想keys是一个对象或者是一个函数,普通对象无法实现,所以ES6诞生了这个Map类型解决这个问题

    var obj={name:''xiaoming}  //普通对象
    

    (2)、创建Map对象和部分API使用

    5.png

    3、weakSet类型和Set类型,以及weakMap和Map类型区别不大,前者weakSet类型、weakMap类型和set、Map类型最大区别是不能使用entries这个API。主要是weakSet类型、weakMap类型使用涉及到垃圾回收这个问题。

    具体想了解可以看看这篇文章:ES2015 WeakMap的学习和使用

    4、TypedArray类型,可以自行看看MDN,或者看看这里:TypedArray类型,比较少用到。

    相关文章

      网友评论

        本文标题:ES6(10)、新增的数据类型

        本文链接:https://www.haomeiwen.com/subject/bogtertx.html