ES6 新增的数据类型

502 阅读3分钟

Symbol

Symbol是一种es6新加的数据类型。它会返回一个symbol类型的值。它每一个返回的symbol的值都是唯一的。所以我们常常用symbol来作为对象属性的标识,这是我们创造出这个类型的仅有的目的。

使用方法:
const symbol1 = Symbol()
const symbol2 = Symbol(xx)
//这样就得到了一个唯一的symbol值

除了用作创建,js还新建了一些symbol。它们用来代表内部语言行为,常用的有以下属性:

  • Symbol.iterator:一个返回一个对象默认迭代器的方法。常常与for...of一起使用
  • Symbol.asyncIrerator:一个返回一个对象默认异步迭代器的方法。与for await of
  • Symbol.match:进行字符串匹配的方法。被String.prototype.match使用
  • Symbol.replace:替换字符串的方法。被String.prototype.replace使用
  • Symbol.search:一个返回一个字符串中与正则表达式相匹配的索引的方法。被String.prototype.search使用

Set

Set对象允许你存储任何类型的唯一值。

使用方法:
let mySet = new Set(); //这里面可以直接传一个数组,可以直接转化为Set
//增加一个值value
mySet.add(value)
//判断是否含有某个值value,返回true或者false
mySet.has(value)
//获取Set的长度
mySet.size
//删除Set中的某个元素value
mySet.delete(value)
Set的迭代
//因为Set中的值唯一,所以在Set中,key和value都是Set当前元素的值
//可以通过原生的迭代器迭代整个Set
for(const item of mySet)  // item为Set中的值
//通过keys,values
for(const item of mySet.keys()) // for(const item of mySet.values()) //item为Set中的值
//通过entries获得键值对
for(const item of mySet.enties) //获得键值对,也就是{Set的值,Set的值}
Set传Array,Array转Set
//Array转Set
const SetArr = new Set(array) //array就是要转化的数组
//Set转Array
const ArrSet = Array.from(set) //set就是要转化的Set
//所以数组去重的一个es6的解决办法如下:
const arr = [1,2,3,4,4,5,5,6]
const newArr = Array.from(new Set(arr)) // [1,2,3,4,5,6]

WeakSet

WeakSet对象允许你将弱保持对象存储在一个集合中。 它跟Set的区别主要有两点:

  • 跟Set相比,WeakSet只能是对象的集合,不能是其他类型
  • WeakSet中存储的是弱引用,这使得如果其他没有对WeakSet中对象的引用,那么这些对象会被当成垃圾处理掉。因此WeakSet是不可枚举的

Map

Map对象保存键值对,并且能够记住键的原始插入顺序。它的键值对也是唯一的。

Map与Object的区别
  1. Map默认没有任何键,只能显示的插入(它的原型为Map,中间隔了一层)。而Object有一个原型,原型链上的键名和本身对象上的键可能产生影响
  2. Map的键名可以是任何值。Object只能是String或者Symbol
  3. Map本身是有序的,所以迭代的时候可以按照插入的顺序迭代,而Object本身是无序的
  4. Map本身有内置的迭代器。而Object只能自己生成
  5. Map的键值对个数可以通过size取得。而Object只能自己手动计算
  6. Map在频繁增删上表现的性能更好
使用方法:
let myMap = new Map()
//添加键值对
myMap.set(任意类型的键,任意类型的值)
//读取值
myMap.get(输入要查询的键的值)
//读取长度
myMap.size
Map的迭代
//forEach
myMap.forEach(x=>console.log(x)) //遍历整个map并且输出每个键值对的值
// for...of
还是老三样,keys,values,entries,还有它本身内置的迭代器导致的本身也能被迭代

Map的出现其实就是为了模拟其他与语言中的二维数组,所以在map中,我们可以通过Array.from以及new Map互相进行类型的转化

WeakMap

WeakMap对象是一组键/值对的集合,其中的键是弱引用。区别仿照Set和WeakSet

TypedArray

这是一个大的类型,没有一个确切的叫TypedArray的类,它由以下类型组成:

Int8Array,Int16Array....
Float32Array,Float64Array....
Unit8Array,Unit16Array....

他们能规定这个数组所存储的类型(传入其他值的时候传值无效)。