* 문제
- JavaScript 상에서 forEach 구문을 돌렸지만 해당 에러 메시지가 뜨며 실행이 되지 않는다.
- "forEach is not a function" 에러 메시지 발생
* 원인
- 배열이 아니기 때문이다.
- 유사배열이기 때문이다.
* 유사배열(Array-like Objects)이란?
- 배열이 아닌데 배열인척 하는것
- 유사배열은 말그대로 배열과 유사한 형태로 흉내낸 객체일 뿐이기 때문에 Array 에서 제공하는 메서드가 기본적으로 제공되지않는다.
유사배열의 조건
1. 반드시 length가 필요하다.
2. 숫자 형태의 indexing이 가능해야한다.
쉽게 말해서
* 배열 = 객체 + length + 메서드
* 유사배열 = 객체 + length
로 이해하면 된다.
예외적으로 node같은 경우는 프로토타입에 forEach가 있기 때문에 가능하다.
(필요하다면 직접 프로토타입에 사용하고 싶은 메서드나 함수를 추가하여 사용할 수 있다.)
이럴때는 Array.isArray 메서드를 사용해서 구분할 수 있다.
Array.isArray(array); // true
Array.isArray(node); // false
Array.isArray(ele); // false
* 해결
Array.from(Array-like Objects).forEach(i => {
console.log(i)
});
* array 형태 객체를 array로 만들어서 돌리면 된다.
'Error > error' 카테고리의 다른 글
[error] react-scripts: Permission denied (0) | 2022.06.14 |
---|