ES6 (5)
Set
Set
은 데이터 타입에 상관없이 유니크한, 고유한 값들의 컬렉션이다. Set
의 값들은 삽입 순서에 따라 배치된다. Set
은 Set
constructor 을 사용하여 생성한다.
let set1 = new Set();
let set2 = new Set("Hello!!!");
set1
은 빈 Set
이다. set2
는 이터러블 객체의 값을 이용하여 만들어졌기 때문에, 빈 Set
이 아니다.
Set
을 이용한 다양한 작업을 보자.
let set = new Set("Hello!!!");
set.add(12); //add 12
console.log(set.has("!")); //check if value exists
console.log(set.size);
set.delete(12); //delete 12
console.log(...set);
set.clear(); //delete all values
// Output
true
6
H e l o !
위에서 언급했듯이, Set
은 유니크한 값들의 컬렉션이며 생성시에 중복된 값은 자동으로 삭제한다. 따라서 size
는 6이되고, ...set
의 출력값은 H e l o !
가 된다.
Set
객체는 iterable protocol을 시행하므로, iterable 객체로 사용될 수 있다.
WeakSet
Set
과 WeakSet
객체의 차이점은 다음과 같다.
-
Set
은 원시타입과 객체 참조를 저장할 수 있다. 반면에,WeakSet
은 오직 객체 참조만 저장한다. -
WeakSet
의 가장 큰 특징중 하나로,WeakSet
에 저장된 객체에 더이상 다른 레퍼런스가 존재하지 않으면 가비지 컬렉션의 대상이 된다. -
WeakSet
은 enumerable 하지 않기에 크기를 찾을 수 없으며, iterable protocol을 따르지 않는다.
WeakSet
은 WeakSet
constructor를 사용하여 생성한다. iterable 객체를 인자로 사용할 수 없다.
let weakset = new WeakSet();
(function(){
let a = {};
weakset.add(a);
})()
//here 'a' is garbage collected from weakset
console.log(weakset.size); //output "undefined"
console.log(...weakset); //Exception is thrown
weakset.clear(); //Exception, no such function
Map
Map
은 key/value
페어의 컬렉션이다. key
,value
는 어떠한 타입의 값이어도 상관없다. 삽입 순서에 따라 배치된다. Map
constructor` 를 사용해 생성한다.
let map = new Map();
let o = {n: 1};
map.set(o, "A"); //add
map.set("2", 9);
console.log(map.has("2")); //check if key exists
console.log(map.get(o)); //retrieve value associated with key
console.log(...map);
map.delete("2"); //delete key and associated value
map.clear(); //delete everything
//create a map from iterable object
let map_1 = new Map([[1, 2], [4, 5]]);
console.log(map_1.size); //number of keys
// Output
true
A
[object Object],A 2,9
2
Map
객체를 생성할 때, iterable 객체로부터 반환되는 value
는 배열이며, 그 길이는 2이고, [key,value]
의 형태여야 한다. 기존에 존재하는 key
값을 추가하면 overwrite 된다. iterable protocol 을 따르기에 , iteable 객체로서 사용될 수 있다.
WeakMap
Map
과 WeakMap
의 차이는 다음과 같다.
-
Map
객체의key
들은 원시타입과 객체참조를 저장할수 있지만 ,WeakMap
의 경우 오직 객체참조만 저장할 수 있다. -
WeakMap
객체에 저장된key
에 참조되는 객체가 다른 참조가 없다면 가비지 컬렉션에 의해 처리된다. -
WeakMap
은 enumerable 하지 않기에 size를 알수없고, iterable protocol을 따르지 않는다.
WeakMap
constructor 로 생성하며 사용은 다음과 같다.
let weakMap = new WeakMap();
(function(){
let o = {n: 1};
weakmap.set(o, "A");
})()
//here 'o' key is garbage collected
let s = {m: 1};
weakmap.set(s, "B");
console.log(weakmap.get(s));
console.log(...weakmap); //exception thrown
weakmap.delete(s);
weakmap.clear(); //Exception, no such function
let weakmap_1 = new WeakMap([[{}, 2], [{}, 5]]); //this works
console.log(weakmap_1.size); //undefined
Author And Source
이 문제에 관하여(ES6 (5)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@smp2103/ES6-5저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)