JavaScript
[Javascript] Set()과 WeakSet()의 차이
fnow
2021. 10. 25. 13:44
반응형
자바스크립트에서 객체란, 숫자, 문자열, 불 값, null, undefined를 제외한 모든 값이다. 객체는 실제 값이 아닌 참조하는 값으로 처리된다. 따라서 객체는 참조를 가지고 있다고 말할 수 있다.
1. Set()
Set() 메서드는 주로 배열의 중복 값을 제거하기 위해 사용된다. 예약어 new와 같이 작성한다.
1
2
3
4
5
6
7
8
9
|
const array = [1, 2, 3, 1];
const set = new Set(array);
console.log(set); // {1, 2, 3}
console.log(toString.call(set)); // [object Set]
const newArray = [...set]; // 스프레드 문법 사용하여 객체로 변형하기
console.log(newArray); // [1, 2, 3]
console.log(toString.call(newArray)); // [object Array]
|
cs |
2. WeakSet()
우선, WeakSet()은 Set()과 사용하는 방식은 동일하다.
1
2
3
4
|
const array = [1, 2, 3, 4, 5];
const weakArray = new WeakSet();
weakArray.add(array); // [1, 2, 3, 4, 5]
|
cs |
다른 점이 있다면, 참조를 가지고 있는 객체만 저장이 가능하다. 위에서 설명했듯이 기본 타입(숫자, 문자열, 불 값, null, undefined)을 제외한 모든 값이 객체이며 객체는 참조를 가진다.
weakArray에 WeakSet을 적용하면, 객체가 아닌 값은 담을 수 없고 에러가 뜬다.
1
2
3
4
5
6
7
8
9
|
const weakArray = new WeakSet();
weakArray.add([1, 2, 3]); // [1, 2, 3]
weakArray.add(function() {}); // function(){}
weakArray.add({name: "Kim", age: 33}); // {name: "Kim", age: 33}
weakArray.add(12345); // Uncaught TypeError: Invalid value used in weak set
weakArray.add(null); // Uncaught TypeError: Invalid value used in weak set
weakArray.add("가나다"); // Uncaught TypeError: Invalid value used in weak set
|
cs |
반응형