JavaScriptで配列を使った'for(var item in list)'がバッドプラクティスとされるのはなぜか?
2023-07-10 02:46:55
質問
単純なゼロベースで数値添字の配列が与えられた。
var list = ['Foo', 'Bar', 'Baz'];
何度も言いますが、誰かがこのように配列内の変数をループすることを提案すると、私はそれに気づきました。
for(var item in list) { ... }
...それは悪い習慣だと提案し、別のアプローチを提案する人がほぼ確実にいます。
var count = list.length;
for(var i = 0; i < count; i++) {
var item = list[i];
...
}
上のシンプルなバージョンを使わず、2番目の例を使う理由は何でしょうか?
どのように解決するのですか?
まず、ループの順番が不定なのは
for...in
ループの順序は不定なので、プロパティが希望する順序で反復される保証はありません。
2つ目は
for...in
はオブジェクトのプロトタイプから継承されたものを含む、すべての列挙可能なプロパティに対して反復処理を行います。配列の場合、あなたのコードやページに含まれるライブラリが、プロトタイプの
Array
のプロトタイプを拡張している場合、影響を受ける可能性があります。
Array.prototype.remove = function(val) {
// Irrelevant implementation details
};
var a = ["a", "b", "c"];
for (var i in a) {
console.log(i);
}
// Logs 0, 1, 2, "remove" (though not necessarily in that order)
関連
-
[解決済み] 配列の反復処理に "for...in "を使用するのは、なぜ良くないのでしょうか?
-
[解決済み] 配列の場合、なぜ a[5] == 5[a] になるのでしょうか?
-
[解決済み] jQueryで要素のクラスリストを取得する
-
[解決済み] なぜJavaScriptのeval関数を使うとダメなのか?
-
[解決済み] なぜdocument.writeは「バッドプラクティス」と言われるのですか?
-
[解決済み】JSONの代わりに生成されたHTMLを返すのは、なぜ悪い習慣なのでしょうか?それともそうなのですか?
-
[解決済み] Twig のキー付き配列のためのループ
-
[解決済み] 兄弟ノードを選択する方法はありますか?
-
[解決済み] JavaScriptでjson-objectのキーを取得する [重複].
-
[解決済み] <ng-content>が空かどうかを確認する方法は?(これまでのAngular 2+で)
最新
-
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 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] JavaScript で範囲を作成する - 奇妙な構文
-
[解決済み] <Enter>でjQuery UIダイアログを送信する
-
[解決済み] なぜJavaScriptでは!{}[true]がtrueに評価されるのですか?
-
[解決済み] Node.jsでbase64エンコードされた画像をAmazon S3へアップロードする
-
[解決済み] node.jsで文字列のsha1ハッシュを取得するにはどうすればよいですか?
-
[解決済み] 無効になっている入力フィールドの値を送信する
-
[解決済み] Javascript 空の配列の削減
-
[解決済み] javascriptで文字列から関数を作成する方法はありますか?
-
[解決済み] AJAX Mailchimp サインアップフォームの統合
-
[解決済み] jQueryを使用して、すべてのクリックイベントハンドラを削除するにはどうすればよいですか?