2010-11-23 20 views
5

可能性の重複:
JavaScript “For …in” with ArraysJavascriptなぜFOR INは悪い習慣ですか?

人々は常にInの使用は悪い習慣であることを教えて、あなたはなぜ私に言うことができるしてください?そしてなぜ私と一緒に使うのが良いですか?

私はいつも私がforeachを使用します。ここで、私はあまりにも多くのことをPHPを使用しているため、Inの使用するのが好き、それはJavaScriptでInのに非常によく似ています:)

答えて

10

悪い練習は終わっを列挙の違いを理解することではありません配列オブジェクトおよびを繰り返します。そうでなければfor...inループは優れたツールです。そこに大きな内部の違いはあるが、私は実用的な方法で説明しよう:

構文は次のとおりです。objectは(自然と、その子孫のいずれか)Objectのインスタンスであり、string varがのプロパティ名を受け取りfor (string in object)、各ループ反復でobject。しかし、ArrayObjectの子孫です!

var array = [0,1,2]; 
for (var property in array) 
    alert(typeof property + '\t' + property + '\n' + typeof array[property] + '\t' + array[property]); 

単にはまったく意味を行うものではありません:だから、それを使うのは完全に合法です。さらに、[]の上の角カッコの表記に注意してください。これはメンバシップ演算子の形式であり、配列要素へのアクセスと混同してはいけません。最初にタイプと2番目のオペランド(number)が必要です。上の例を破って、代わりにvar array = new Array(3)で配列を作成してみましょう。ループはもう機能しませんが、array.length == 3は正しく動作します。

結論:配列以外のオブジェクトにはを使用してください。アレイにはfor (var number = 0; number < array.length; number++)を使用してください。

ところで、JavaScript オブジェクトは、PHPの関連配列(適切な用語を主張する場合はハッシュテーブル)と似ています。構文はvar object = {string:value,anotherName:moreStuff}です。ここにfor...inが便利です!

Further reading

+2

も[JavaScriptをすばやく内のオブジェクトを反復処理]デヴィッド・ハンフリーの記事を参照してください(http://vocamus.net/dave/?p=1205) - 配列のために、それははるかに遅いです。 –

関連する問題