NodeList는 이제 모든 주요 브라우저에서 forEach ()를 갖습니다.
MDN의 nodeList forEach ()를 참조하십시오 .
원래 답변
이 답변 중 어떤 것도 NodeList가 Array에서 상속하지 않는 이유를 설명 하지 않으므로 forEach나머지 는 모두 가질 수 있습니다 .
대답은 이 es-discuss 스레드 에서 찾을 수 있습니다. 요컨대, 웹을 깨뜨립니다.
문제는 instanceof가 인스턴스가 Array.prototype.concat과 결합 된 Array임을 의미하는 것으로 잘못 가정 한 코드였습니다.
Google의 Closure Library에 버그가있어서 거의 모든 Google 앱이 이로 인해 실패했습니다. 라이브러리는 이것이 발견 되 자마자 업데이트되었지만 concat과 함께 동일한 잘못된 가정을하는 코드가 여전히있을 수 있습니다.
즉, 일부 코드는 다음과 같은 작업을 수행했습니다.
if (x instanceof Array) {
otherArray.concat(x);
} else {
doSomethingElseWith(x);
}
그러나 concat"실제"배열 (배열의 인스턴스가 아님)을 다른 객체와 다르게 취급합니다.
[1, 2, 3].concat([4, 5, 6])
[1, 2, 3].concat(4)
즉, 위의 코드 x는 NodeList 일 때 깨 졌다는 것을 의미합니다. 왜냐하면 그것이 doSomethingElseWith(x)경로를 따라 내려 가기 전에는 경로를 따라 내려 갔고 실제 배열이 아니기 otherArray.concat(x)때문에 이상한 일을했기 때문 x입니다.
한동안 ElementsArray의 실제 하위 클래스이고 "새 NodeList"로 사용될 클래스 에 대한 제안이있었습니다 . 그러나 다양한 기술 및 사양 관련 이유로 아직 구현할 수 없었기 때문에 적어도 지금 은 DOM 표준에서 제거되었습니다 .