バックグラウンド:
ノード リストを操作しているときに、非常に奇妙な現象に遭遇しました。getElementsByClassName などを使用して並べ替えたいと思いました。ノードリストを繰り返し処理し、各項目を配列にプッシュして配列をソートする方法が 1 つあります。(ちなみにこれは機能しましたが、期待どおりではありませんでした)。を使用しfor (var i in nodeList)
て反復しようとしましたが、未定義の最後のいくつかの項目で例外をスローし続けました。奇妙な部分は、代わりfor (var i = 0; i < nodeList.length; i++)
に反復処理に使用できることです。もう一度テストしたところ、stackoverflow ページでコンソールで次のコードを実行しました。
for (var i in document.getElementsByTagName("span"))
console.count("items");
console.log(document.getElementsByTagName("span").length);
まで数えましたitems: 382
が長さは380
でした。予想通り、私が入ったときdocument.getElementsByTagName("span")[380]
、document.getElementsByTagName("span")[381]
彼らは未定義で戻ってきました。この奇妙な動作は配列では発生しません (確かに、nodeLists と配列は異なりますが、これは問題の原因となっているループの違いではないことを証明しています)。
質問:
for(var i in nodeList)
最後にいくつかの未定義の項目を返す nodeLists で構成要素の動作が異なるのはなぜですか?