饥人谷技术博客JavaScriptalready

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

2022-04-15  本文已影响0人  飞天小猪_pig

目前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类型,比较少用到。

上一篇 下一篇

猜你喜欢

热点阅读