目前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.png3、weakSet类型和Set类型,以及weakMap和Map类型区别不大,前者weakSet类型、weakMap类型和set、Map类型最大区别是不能使用entries这个API。主要是weakSet类型、weakMap类型使用涉及到垃圾回收这个问题。
具体想了解可以看看这篇文章:ES2015 WeakMap的学习和使用
4、TypedArray类型,可以自行看看MDN,或者看看这里:TypedArray类型,比较少用到。
网友评论