2

indexOf メソッドを IE6 の Array クラスに追加する方法によると、このメソッドがランダムな配列を繰り返し処理するのを拒否するにはどうすればよいですか? 例えば:

Array.prototype.indexOf = function(needle) { ... };

var array = [1, 2, 3];
for (var i in array) {
    document.write(i + ': ' + array[i]);
}

出力を与える

0: 1
1: 2
2: 3
indexOf: function ...

どこにコードを追加せずにindexOfプロパティをスキップして反復処理を停止するにはどうすればよいですか

for(...)

と呼ばれる?

4

3 に答える 3

6

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)) {
        ...
    }
}

これは醜く見えますが、そうしないと問題があるため、JSLintJSHintなどの JS コード品質チェック ツールが、記述しない場合に問題としてフラグを立てるという点で、Javascript のベスト プラクティスとして推奨されます。このようなあなたのfor..inループ。

この問題について詳しくは、http: //yuiblog.com/blog/2006/09/26/for-in-intrigue/をご覧ください。

于 2012-06-23T21:53:10.500 に答える
2

配列に正しいfor(...)ループを使用する。

for (var i = 0, length = array.length; i < length; i++) {
    console.log(i + ": " + array[i]);
}

使用しているフォームは、オブジェクトのメンバーとそのプロトタイプ チェーンを反復処理するためのものです。

のため
に...で

于 2012-06-22T10:55:41.347 に答える