2010-12-30 16 views
1

何が間違っているのか分かりません。JavaScriptコードで何が問題になっていますか?

var CarObj = function(passengers, maxLoad, wheels, doors, maxSpeed) { 
    this.passengers = passengers; 
    this.maxLoad = maxLoad; 
    this.wheels = wheels; 
    this.doors = doors; 
    this.maxSpeed = maxSpeed; 
}; 
var ferrari = new CarObj(4, "700kg", 4, 2, "360km/h"); 
var output = new Array(); 
for (var i = 0; i < ferrari.length; i++) { 
    for (var a in ferrari) { 
     output[i] = a; 
    } 
} 
document.getElementById('ELEMENTHERE').innerHTML = (output.join(" ")); 
+1

問題が何ですか。 – Andrey

+1

それは何をすることになっており、実際に何をしていますか? –

+0

これはフェラーリの頭蓋骨の中にあるもの(仕様は何ですか?)を出力することになっていますが、何もしないことになります。 – DarkLightA

答えて

2
for (var i = 0; i < ferrari.length; i++) { 

ferrari配列ではありませんが、あなたはそれがあるようにそれにアクセスしようとしています。これと対応するエンドブレースを取り外します。

output[i] = ...;output.push(...);またはoutput[output.length] = ...;に変更すると、iを手動で増やす必要がなくなります。

+0

私は必要なカウンターをどうやって手に入れますか? – DarkLightA

+0

@DarkLightA:上記の回答に – PleaseStand

1

あなたのfor...inは、外側のforと同じオブジェクトをループしています。これはferrariに長さがある場合outputの各項目をferrariの最後のキーに設定します。そうでない場合は、未定義のプロパティについてエラーを表示します。

for (var a in ferrari) { 
    output[output.length] = a; // or ferrari[a] if you wanted values, not keys 
} 

と完全に外forループを取り除く:あなたはおそらく代わりにやってみたかった何

1
for (var i in ferrari) output.push(ferrari[i]); 

それは少しより堅牢行うにすることだろう。

for (var i in ferrari) 
    if (ferrari.hasOwnProperty(i)) 
    output.push(ferrari[i]); 
0

あなたは

i = 0; 
for (var a in ferrari) { 
    output[i++] = a; 
} 

を意味していますか? ferrariにはlengthプロパティがありません。

+0

を追加しました。カウンターは必要ありません。配列は自動的に展開され(長さは適切に更新される)、 'output.length'は追加する項目のインデックスとして使用できます。 – cHao

0

ferraiはオブジェクトであり、名前の長さ(配列はありません)でプロパティを持ちません。以下のようにコードを変更し :

<script type="text/javascript"> 
     var CarObj = function(passengers, maxLoad, wheels, doors, maxSpeed) {  
      this.passengers = passengers;  
      this.maxLoad = maxLoad;  
      this.wheels = wheels;  
      this.doors = doors;  
      this.maxSpeed = maxSpeed; 
     }; 
     var ferrari = new CarObj(4, "700kg", 4, 2, "360km/h"); 
     var output = new Array(); 
     var i=0; 
      for (var a in ferrari) 
      { 
       output[i] = a;  
       i++; 
      } 
     document.getElementById('ELEMENTHERE').innerHTML = (output.join(" ")); 
    </script> 
0

理由だけではなく、オブジェクトのtoString()をオーバーライドしますか?

var CarObj = function(passengers, maxLoad, wheels, doors, maxSpeed) { 
    this.passengers = passengers; 
    this.maxLoad = maxLoad; 
    this.wheels = wheels; 
    this.doors = doors; 
    this.maxSpeed = maxSpeed; 
    this.toString = function() { 
    return this.passengers + " " + this.maxLoad + " " + this.wheels + " " + this.doors + " " + this.maxSpeed; 
    }; 
}; 
関連する問題