…的奇怪问题..循环中
Weird issue with for...in loop
这很有效:
for (var i = 0; i < this.size(); i++) {
values.push(this.cards[i].value);
}
但这不是:
for (var card in this.cards) {
values.push(card.value);
}
为什么?
因为在for...in
循环中,变量是键,而不是值。
应该是:
for (var card in this.cards) {
values.push(this.cards[card].value);
}
for (var card in this.cards) {
values.push(card.value);
}
card
将是索引号,而不是值。
for..in
循环枚举对象的属性名,而不是属性值。应为:
for ( var key in this.cards ) {
values.push( cards[key].value );
}
for..in
的一个缺点是它还枚举继承的属性名称(当然,只有当相应的属性是可枚举的)。
另外,考虑一下:
var values = this.cards.map(function ( card ) {
return card.value;
});
因为for (var x in y)
语法在对象(键)的PROPERTIES上循环,如果它是数组,它可以是数组的成员,也可以是其他可枚举属性。
例如:
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)
的作用,否则不要使用它——不要试图成为一个刺针,只需让你免于大量的头发拉扯和抓头,我自己也曾经历过:/
相关文章:
- Jquery图像循环问题
- JavaScript的循环问题,将值插入数组将不起作用
- 数学和循环问题
- Java脚本循环问题
- NetSuite行项目删除内部循环问题
- 附加仅适用于第一个子循环问题
- 简单的 do/while 循环无限循环问题
- Javascript 和 HTML5 循环问题
- 仅在jQuery函数内部循环问题
- 嵌套循环问题
- 谷歌地图标记的循环问题
- 函数在 For 循环问题中
- PHP while 循环问题在 iOS 5 Safari 中
- JavaScript 加载重置时间戳循环问题
- Jquery 循环问题
- 与jquery结合使用时的Javascript循环问题
- Javascript中的ID和for循环问题
- 无限滚动(mysql,php&js)循环问题
- Facebook查询循环问题
- jQueryrotate if else循环问题