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
입니다.
한동안 Elements
Array의 실제 하위 클래스이고 "새 NodeList"로 사용될 클래스 에 대한 제안이있었습니다 . 그러나 다양한 기술 및 사양 관련 이유로 아직 구현할 수 없었기 때문에 적어도 지금 은 DOM 표준에서 제거되었습니다 .