基本數據類型 -> 棧
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