2011-01-30 1 views
2

サンプル:オブジェクトの配列から検索すると、未定義のオブジェクトのプロパティが表示されますか? JavaScriptコードの

function a() { 
    this.array1 = []; 
    this.addToArray = function(name) { 
     this.array1.push(new b(name)); 
     return true; 
    } 
    this.searchForName = function(name) { 
     for(var i in this.array1) { 
      alert(i.name); 
     } 
    } 
    function b(name) { 
     this.name = name; 
    } 
} 

は、私は、HTML文書でこのJavaScriptファイルが含まれています。私はこのコードを持っているHTMLドキュメントのスクリプトタグ内に:このコードを実行する

var myObject = new a(); 
myObject.addToArray("test1"); 
myObject.searchForName("test1"); 

を、私がポップアップすることで"test1"との警告を期待するが、代わりにそれは未定義としてポップアップ表示されます。しかし、Chromeのデバッガでは、myObjectの内部に配列のアイテム0があることが示されています。ブレークポイントを使用してコードをテストすると、警告が呼び出された時点で、i.nameが定義されていないことが示されます。これには何が問題なのですか?

答えて

2

の代わりにi番号のnameプロパティを探しています(this.array)。

ので:

i.name 

は次のようになります。

this.array1[i].name 

結果は次のとおりです。

this.searchForName = function(name) { 
    for(var i in this.array1) { 
      // get it from this array1 
     alert(this.array1[i].name); 
    } 
} 

の作業例:http://jsfiddle.net/seNxD/

数字のインデックスだけに興味がある場合は、for-inステートメントを使用することはお勧めできません。 forステートメントは、列挙していないので使用するステートメントです。 for...inMDC documentation describes why)とアレイ上

+0

配列の要素をループするときに 'for ... in'を使用しないでください。 – mhitza

+0

@mhitza:それは私の答えが言うことではありませんか? ; o) – user113716

+0

Lol、私は最後の文を逃したかと思いません:) – mhitza

2

決してループ。配列の指標であろうキーとにかくオブジェクトの、上

for(var i = this.array1.length;i--;) { 
    alert(this.array1[i].name); 
} 

for...inループ:正常forループを使用します。したがって、for...inループのループ本体は、上記のforループとまったく同じに見える必要があります。

var obj = {foo: 'bar', answer: '42'}; 
for(var key in obj) { 
    alert(key + " is " + obj[key]); 
} 

さらに注:あなたがこれを持っている場合

たとえば、あなたはfor...inを使用することになり大文字でコンストラクタ関数の名前を開始するための規則です。

+0

@TheDog:いいえ、for ... inの主な理由は、オブジェクトのプロパティをループすることです。 –

+0

+1エラーが発生しやすいループを処理するには、私よりも優れた仕事をしました。 – user113716

関連する問題