ES6 (5)

16253 단어 ES6JavaScriptES6

Set


Set 은 데이터 타입에 상관없이 유니크한, 고유한 값들의 컬렉션이다. Set 의 값들은 삽입 순서에 따라 배치된다. SetSet 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


SetWeakSet 객체의 차이점은 다음과 같다.

  • Set 은 원시타입과 객체 참조를 저장할 수 있다. 반면에, WeakSet 은 오직 객체 참조만 저장한다.

  • WeakSet의 가장 큰 특징중 하나로, WeakSet 에 저장된 객체에 더이상 다른 레퍼런스가 존재하지 않으면 가비지 컬렉션의 대상이 된다.

  • WeakSet은 enumerable 하지 않기에 크기를 찾을 수 없으며, iterable protocol을 따르지 않는다.

WeakSetWeakSet 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


Mapkey/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


MapWeakMap의 차이는 다음과 같다.

  • 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

좋은 웹페이지 즐겨찾기