では私のJSFiddle、私は単に要素の配列を反復処理しようとしています。ログステートメントが証明するように、配列は空ではありません。しかし、への呼び出しforEach
により、(あまり役立たない)「キャッチされていませんTypeError
:undefined
関数ではありません」というエラーが表示されます。
私は愚かなことをしているに違いない。私は何を間違っていますか?
私のコード:
var arr = document.getElementsByClassName('myClass');
console.log(arr);
console.log(arr[0]);
arr.forEach(function(v, i, a) {
console.log(v);
});
.myClass {
background-color: #FF0000;
}
<div class="myClass">Hello</div>
のようなもの
—
Jer
[1,2,3].forEach(function(v,i,a) { console.log(v); });
で結構です。これと私の例の配列の違いは何ですか?
あなたの例には配列がありません。配列だと思うのはなぜですか?
—
2014年
@Jer:
—
いいえ、2014年
arr instanceof Array
結果として、Array.prototype.forEach()などfalse
のArray
オブジェクトのプロトタイプメソッドを利用できません。あるHTMLCollectionオブジェクトのような配列(ただし、継承またはインスタンス化しません)。したがって、標準ループは、オブジェクトのインデックスを単に反復するだけで機能し、のプロトタイプではありません。arr
Array
for
Array
@Jer —組み込みオブジェクトとホストオブジェクトの違いを調べる必要があります。前者はECMA-262に準拠し、後者はホストが望むだけです。DOMには、主にNodeListインターフェースに基づいた、インデックス(document.images、document.forms、form.elements、select.optionsなど)によるメンバーへのアクセスを可能にする多くのオブジェクトがあります。
—
RobG 2014年
arr
は配列ではなく、HTMLCollection
です。配列と同じメソッドはありません。developer.mozilla.org/en-US/docs/Web/API/…。ここではそれについてのSOポストもあります:stackoverflow.com/questions/13433799/...は