基本数据类型 -> 栈
string number boolean null undefined Symbol(es6)
引用数据类型 -> 堆
array object function data Set(es6) Map(es6)
Set是es6中新的引用数据类型,类似于数组,但是成员是唯一的 ,所以可以用来去重
const set = new Set([1,2,3,4,5,6,5]); console.log(set); let newSet = new Set(); //添加 add newSet.add("5").add(5); console.log(newSet); //删除 delete newSet.delete(5); console.log(newSet); //是否含有某元素 has console.log(newSet.has("5")); //true; //清除所有 clear newSet.clear(); console.log(newSet); //size Set的长度 和数组的length差不多
注意:Set内部的判断机制是 === ,undefined 与 undefined 是恒等的,所以不重复,
NaN 与 NaN 是不恒等的,但是在 Set 中认为NaN与NaN相等,所有只能存在一个,不重复。
let newSet = new Set(); newSet.add(NaN).add(NaN).add(1).add(1); console.log(newSet);
Map也是es6中新引用的数据类型,类似于对象。
但对象的键只能是字符串或者symbols,但Map的键可以是任意值。
let map = new Map([['name','张三']]); //添加新元素 set map.set("age","18"); console.log(map); //查找特定的键并返回值 get console.log(map.get("age")); //查找是否有这个键 has console.log(map.has("age")); //删除某个键 delete map.delete("age"); console.log(map); //删除所有键 clear console.log(map.clear());
如何知道Set和Map是新的引用数据类型?
let set = new Set(); let map = new Map(); console.log(Object.prototype.toString.call(set)) //"[object Set]" console.log(set instanceof Set) //true
传送门:https://es6.ruanyifeng.com/#docs/set-map