2012-01-31 7 views

答えて

23

アレイにはfor...inを使用しないでください。その場合は、従来のforループを使用することをお勧めします。

for...inは配列をオブジェクトとして扱うため、indexOfまたはlengthのようなプロパティがループに含まれている可能性があります。通常のforループはテンキーのみを処理するので、この問題は回避されます。

サイドノートでは、プレーンオブジェクトを繰り返し処理すると不要なプロパティが表示される可能性があります(他の人が指摘したように、オブジェクトのプロトタイプに追加するプロパティが表示されます)。あなたのfor...inループを書き込むことによってこの問題を回避この方法を取得することができます:

var obj = { ... }; 
for (var prop in obj) { 
    if (obj.hasOwnProperty(prop)) { 
    var item = obj[prop]; 
    ... 
    } 
} 

しかし明確にするために:あなたはまだは、アレイ上のこのメソッドを使用しないでください。あなたは、配列のためのループの間違った種類を使用している

+0

ありがとう!忍者... – randomor

7

からfor ... in ...も、あなたのケースで.indexOf()方法を含むオブジェクトのいずれか列挙プロパティが含まれます。代わりに、この

用途:日付ブラウザへ

var i, n = hi.length; 
for (i = 0; i < n; ++i) { 
    console.log(i, hi[i]); 
} 

Chromeと他のアップは、ECMAScriptの5を実装し、正しく非可算プロパティなど、すべての組み込みメソッドをマーク。

+1

ハ、もう一度戦う! – benekastah

+0

'indexOf'はIE8の配列メソッドではありません。なぜそれが表示されるのですか? – Esailija

+0

IE8には' indexOf() 'がありませんか?ワオ... – Alnitak

4

これは、あなたのページに含まれているスクリプトがにindexOfメソッドを追加しているために起こります。これは、すべての配列がindexOfメソッドを継承していることを意味します。これはIE8でもそのメソッドを使用できることを意味するためです。

しかし、IE8ではプロパティを列挙できないものとしてマークする方法がないため、配列のすべてのプロパティを列挙するたびに表示されます。for - inループ。おそらくforループが必要でした。

関連する問題