ホームページ > 記事 > ウェブフロントエンド > JavaScriptでfor inループを使用するにはどうすればよいですか?注意が必要なことは何ですか?
JavaScript にはオブジェクトを反復するための 2 つの方法があることは誰もが知っています:
(1)for ループ;
(2)for..in ループ;
for ループを使用して配列オブジェクトを反復することは、誰もがすでによく知っていると思います。 。ただし、ループ内で for.. を使用する場合は、誰もが注意する必要があります。皆さん、聞いてください...
JavaScript は特別なループ (つまり、for...in ループ) を提供します。これは、オブジェクトのプロパティまたは配列の各要素を for... で反復するために使用されます。ループ内 ループカウンターは数値ではなく文字列です。これには、現在のプロパティの名前または現在の配列要素のインデックスが含まれます。
ケース 1:
//使用for..in循环遍历对象属性 varperson={ name: "Admin", age: 21, address:"shandong" }; for(vari in person){ console.log(i); }
実行結果は次のとおりです:
名前
年齢
アドレス
オブジェクトを走査するとき、ループカウンターである変数 i はオブジェクトの属性名です
//使用for..in循环遍历数组 vararray = ["admin","manager","db"] for(vari in array){ console.log(i); }
実行結果:
0
1
2
いつ 配列を走査するとき、ループカウンターである変数 i は現在の配列要素のインデックスです
ケース 2:
しかし今では、for..in ループは非常に簡単であるようです。次の例を見てください:
var array =["admin","manager","db"]; //给Array的原型添加一个name属性 Array.prototype.name= "zhangsan"; for(var i in array){ alert(array[i]); }
実行結果:
admin
manager
db
zhangsan
不思議ですね、なぜ理由もなく zhangsan が表示されるのでしょうか
では、for ループを使用すると何が起こるかを見てみましょう。
vararray = ["admin","manager","db"]; //给Array的原型添加一个name属性 Array.prototype.name = "zhangsan"; for(var i =0 ; i<array.length; i++){ alert(array[i]); };
実行結果:
admin
manager
db
ああ、for..in ループが特定の型のプロトタイプ内のメソッドと属性を走査するため、コード内で問題が発生する可能性があることがわかりました。予期しないエラー。この問題を回避するには、オブジェクトの hasOwnProperty() メソッドを使用します。オブジェクトのプロパティまたはメソッドが継承されていない場合、hasOwnProperty() メソッドは true を返します。つまり、ここでのチェックには他のオブジェクトから継承されたプロパティやメソッドは含まれず、特定のオブジェクト自体で直接作成されたプロパティのみが含まれます。
ケース 3:
vararray = ["admin","manager","db"]; Array.prototype.name= "zhangshan"; for(vari in array){ //如果不是该对象自身直接创建的属性(也就是该属//性是原型中的属性),则跳过显示 if(!array.hasOwnProperty(i)){ continue; } alert(array[i]); }
操作結果:
管理者
マネージャー
db
すべてが再び元の状態に戻りました。
以上がJavaScriptでfor inループを使用するにはどうすればよいですか?注意が必要なことは何ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。