[解決済み] なぜnodelistにはforEachがないのですか?
質問
を変更する短いスクリプトを作成していました。
<abbr>
要素の内側のテキストを変更する短いスクリプトを作成していましたが
nodelist
には
forEach
メソッドを使用します。 私が知っているのは
nodelist
を継承していないことは知っています。
Array
のような気がしませんか?
forEach
は便利なメソッドだと思いませんか?私の知らない特別な実装上の問題があって、そのために
forEach
に
nodelist
?
注:DojoとjQueryはどちらも
forEach
を何らかの形でノデリストに使用していることは知っています。 私は制限のため、どちらも使用できません。
どのように解決するのですか?
NodeList は現在、すべての主要なブラウザで forEach() を備えています。
参照 MDN の nodeList forEach() を参照してください。 .
オリジナルの回答
どの回答も
なぜ
NodeList は Array を継承していないので、NodeList に
forEach
といった具合です。
答えが見つかりました このes-discussのスレッドにあります。 . 要するに、それはウェブを壊してしまうのです。
問題は、Array.prototype.concat と組み合わせて、インスタンスが配列であることを意味する instanceof を誤って仮定するコードでした。
Google の Closure ライブラリにバグがあり、これが原因でほとんどすべての Google のアプリが失敗していました。このバグが発見されるとすぐにライブラリは更新されましたが、concat と組み合わせて同じ不正確な仮定を行うコードがまだ存在する可能性があります。
つまり、あるコードは次のようなことをしていました。
if (x instanceof Array) {
otherArray.concat(x);
} else {
doSomethingElseWith(x);
}
しかし
concat
は、quot;real" 配列(instanceof Arrayではない)を他のオブジェクトと区別して扱います。
[1, 2, 3].concat([4, 5, 6]) // [1, 2, 3, 4, 5, 6]
[1, 2, 3].concat(4) // [1, 2, 3, 4]
ということは、上のコードが壊れたのは
x
が NodeList であったときに壊れたということです。
doSomethingElseWith(x)
のパスを通ったのに対し、その後では
otherArray.concat(x)
というパスを通るので、何か変なことになりました。
x
が本当の配列でなかったため、奇妙なことになりました。
しばらくの間
Elements
クラスが提案されていましたが、これは Array の本当のサブクラスであり、新しい NodeList" として使用されます。しかし、それは
から削除され、DOM 標準
というのも、さまざまな技術的および仕様上の理由から、まだ実装することが現実的でなかったからです。
関連
-
[解決済み] なぜGoogleはJSONレスポンスにwhile(1);を前置するのでしょうか?
-
[解決済み] JSONPとは何か、なぜ作られたのか?
-
[解決済み] forEachループでasync/awaitを使用する
-
[解決済み] 配列の反復処理に "for...in "を使用するのは、なぜ良くないのでしょうか?
-
[解決済み] C#がforeachで変数を再利用するのは理由があるのか?
-
[解決済み] JavaScriptには、与えられた範囲内の範囲を生成する "range() "のようなメソッドがありますか?
-
[解決済み] foreachループの現在の反復処理のインデックスを取得するにはどうすればよいですか?
-
[解決済み】PHPの'foreach'は実際どのように動作するのですか?
-
[解決済み] JavaScriptで、ある文字列が別の文字列の中に出現するすべてのインデックスを見つけるにはどうすればよいですか?
-
[解決済み] HTML要素にスクロールバーがあるかどうかをチェックする
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] ジェスト あるクラスの特定のメソッドをモックする方法
-
[解決済み] チェックボックスが選択されているかどうかを確認するjQuery
-
[解決済み] なぜ "use strict "はパフォーマンスを10倍向上させるのか?
-
[解決済み] アサインの左側にJavascriptのオブジェクトブラケット表記({ ナビゲーション } =)があります。
-
[解決済み] CORS OriginヘッダーとCSRFトークンによるCSRF保護
-
[解決済み] コールバック地獄とは何か、RXはそれをどのように、そしてなぜ解決するのか?
-
[解決済み] Node.jsのES6クラスをrequireで作る
-
[解決済み] なぜjavascriptのES6 Promisesはresolve後も実行を継続するのですか?
-
[解決済み] querySelectorAllがない場合、ライブラリを使用せずに属性で要素を取得する?
-
[解決済み] document.querySelectorAllはなぜ本当のArrayではなくStaticNodeListを返すのですか?