0

私は現在jquery 1.8.3を使用しています。indexOf追加されたと思うArray.prototypeので、すべての配列には常に最初の要素としてメソッド indexOf が含まれています。for (var i in object)私はいつも最初の要素としてメソッド infexOf を取得し、コードにバグがありました。

バグは IE8 でのみ発生しました。

私が望むのは、このindexOfをすべての配列から削除するか、とにかくjqueryをハックしてこの問題を解決することです。

PS:jqueryがこの問題の原因であるかどうかさえわかりません

ありがとう。

4

2 に答える 2

1

ここでの正解は、for(...in...)ループを使用して Javascript で配列を反復するべきではないということです。

配列を持つことの要点は、要素の番号付きシーケンスがあるため、for()ループを使用する必要があることです。

for(var i=0; i<myArray.length; i++) {
     //do stuff here with myArray[i]
}

この場合、それだけで問題は解決します。これは、番号付きの要素のみを反復するため、indexOfメソッドは関与しません。

ただし、ここで問題を簡単にfor(..in..)説明すると役立つ場合があるので、説明させてください...

表示されているエラーの根本的な原因は、indexOfメソッドが IE8 の配列に対してサポートされていないためです。そのため、コード内の何か (jQuery ではありません) がそれを Array プロトタイプに追加しています。

これは、for(..in..)ループを実行すると、反復される要素の 1 つとして選択されることを意味します。

この場合、より良い解決策 (for()ループ。上記を参照) がありますが、実際にループを使用する必要がある場合for(..in..)、これは実際の問題になる可能性があります。ループhasOwnProperty()内をすぐにチェックすることで、これを防ぐことができます。for(..in..)この関数は、オブジェクト プロトタイプの一部である項目を返すfalseため、オブジェクトをループするときに不要なメソッドにヒットするのを避けるのに役立ちます。

for(..in..)これは、すべてのループのベスト プラクティスと見なされます。実際、コーディング スタイルをチェックするためにJSLintなどのツールを使用すると、これを行わないとエラーが発生します。

于 2013-05-22T15:30:12.880 に答える