티스토리 뷰
공부일지(TIL)/Error case
Uncaught TypeError: Method Set.prototype.add called on incompatible receiver undefined
Alledy 2021. 5. 3. 17:07현상
var mySet = new Set();
['bar', 'baz'].forEach(mySet.add);
이 현상은 꼭 Set이어야 하는 것은 아니고, 콜백 내부에서 this를 사용하고 있는 케이스에서 문제가 된다.
forEach문이나 map에는 첫번째 인자로 콜백을 넘겨주고 두 번째인자로 this를 넘겨주도록 되어있는데, 만약 값을 넘겨주지 않으면 두 경우 모두 undefined
로 설정된다. 그러므로 콜백으로 넘겨준 메서드 내에서 this가 사용되고 있는 경우, 참조하는 this가 undefined가 되어 정상적으로 실행되지 않는다.
해결 방법
- 명시적인 바인딩
var mySet = new Set(); ['bar', 'baz'].forEach(mySet.add.bind(mySet));
- Arrow 함수 사용화살표 함수의 this는 상위 스코프의 this를 참조한다. (참고 - this 정리 포스팅)
var mySet = new Set(); ['bar', 'baz'].forEach(element => mySet.add(element));
Ref
https://stackoverflow.com/questions/37199019/method-set-prototype-add-called-on-incompatible-receiver-undefined
https://stackoverflow.com/questions/63624124/how-does-this-keyword-work-in-map-and-call
https://qvault.io/javascript/javascript-map-function-explained-a-deep-dive/
'공부일지(TIL) > Error case' 카테고리의 다른 글
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- Redux
- til
- oracle
- rxjs
- this
- Java
- 알고리즘
- package.json
- 깃
- 인스턴스
- Prefix Sums
- 개발 공부
- 리덕스
- youtube data api
- Session
- jQuery
- react
- getter
- c언어
- 제네릭스
- CSS
- linkedlist
- 자바
- 포인터 변수
- JavaScript
- Data Structure
- SQL
- useEffect
- GIT
- Conflict
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
글 보관함