for..in
これは、Javascript のループに関するよく知られた問題です。
直接追加した配列またはオブジェクトの要素をループしているだけだと思うかもしれませんが、プロトタイプのメソッドもループします。これにより、予期しない結果が生じる可能性があります。
これには 2 つの方法があります。
まず、配列の場合は使用しないでくださいfor..in
。代わりに単純なfor()
ループを使用してください。つまり:
for(var counter=0; counter<myArray.length; counter++) {...}
この形式は、数値配列要素のみを反復処理することが保証されているため、配列に推奨されます。
length
もちろん、一般的なオブジェクトにはプロパティも数値要素もないため、機能しません。これらについては、引き続き を使用する必要がありますが、不要な要素を除外するためにループ内にステートメントをfor..in
常に含める必要があります。if()
for..in
これの形式は次のようになります。
for (name in obj) {
if (obj.hasOwnProperty(name)) {
...
}
}
これは醜く見えますが、そうしないと問題があるため、JSLintやJSHintなどの JS コード品質チェック ツールが、記述しない場合に問題としてフラグを立てるという点で、Javascript のベスト プラクティスとして推奨されます。このようなあなたのfor..in
ループ。
この問題について詳しくは、http: //yuiblog.com/blog/2006/09/26/for-in-intrigue/をご覧ください。