-1

これは機能します:

for (var i = 0; i < this.size(); i++) {
    values.push(this.cards[i].value);
}

しかし、これはしません:

for (var card in this.cards) {
    values.push(card.value);
}

なんで?

4

4 に答える 4

6

ループでfor...inは、変数は値ではなくキーです。

そのはず:

for (var card in this.cards) {
    values.push(this.cards[card].value);
}
于 2012-07-30T18:17:20.803 に答える
3
for (var card in this.cards) {
    values.push(card.value);
}

...card値ではなく、インデックス番号になります。

于 2012-07-30T18:16:55.637 に答える
2

ループはfor..in、プロパティ値ではなく、オブジェクトのプロパティ名を列挙します。次のようにする必要があります。

for ( var key in this.cards ) {
    values.push( cards[key].value );
}

の欠点の 1 つfor..inは、継承されたプロパティ名も列挙することです (もちろん、対応するプロパティが列挙可能な場合のみ)。


また、これを考慮してください:

var values = this.cards.map(function ( card ) {
    return card.value;
});
于 2012-07-30T18:16:46.947 に答える
1

構文がオブジェクト (キー) の PROPERTIES をループするためfor (var x in y)です。これは、配列の場合は配列のメンバーになることができますが、他の列挙可能なプロパティも同様です。

例えば:

var person={fname:"John",lname:"Doe",age:25}; 

for (x in person)
{
  txt=txt + person[x];
}

すべてのプロパティ (JohnDoe25) を出力しますが、配列には要素 (たとえば、配列に含まれる値) とプロトタイプのプロパティであるメンバーがあります。このことを考慮:

// Somewhere deep in your javascript library...
Array.prototype.foo = 1;

// Now you have no idea what the below code will do.
var x, a = [1,2,3,4,5];
for (x in a){
    // Now foo is a part of EVERY array and 
    // will show up here as a value of 'x'
}

xループのある時点で の値として表示されfooますが、それが意図されていることはほとんどありません。

for(var x in y)それが何をするのかを理解しない限り、使用しないでください-刺すつもりはありません。私自身が一度経験した多くの髪を引っ張ったり頭を引っ掻いたりすることからあなたを救うだけです:/

于 2012-07-30T18:25:14.740 に答える