Javascript 循环中for…的奇怪问题
这项工作:Javascript 循环中for…的奇怪问题,javascript,arrays,for-loop,for-in-loop,Javascript,Arrays,For Loop,For In Loop,这项工作: for (var i = 0; i < this.size(); i++) { values.push(this.cards[i].value); } 为什么?for..in循环枚举对象的属性名称,而不是属性值。应该是: for ( var key in this.cards ) { values.push( cards[key].value ); } for..in的一个缺点是它也会枚举继承的属性名(当然,只有当对应的属性是可枚举的时) 也可以这样考虑:
for (var i = 0; i < this.size(); i++) {
values.push(this.cards[i].value);
}
为什么?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;
});
// 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'
}
<代码>卡片将是索引号,而不是值。因为在
for…in
循环中,变量是键,而不是值
应该是:
for (var card in this.cards) {
values.push(this.cards[card].value);
}
因为(for(var x in y)
语法循环对象(键)的属性,如果对象是数组,则可以是数组的成员,也可以是其他可枚举属性
例如:
var person={fname:"John",lname:"Doe",age:25};
for (x in person)
{
txt=txt + person[x];
}
将打印出所有属性(JohnDoe25),但数组具有作为元素的成员(例如数组中包含的值)以及原型属性。考虑这一点:
var values = this.cards.map(function ( card ) {
return card.value;
});
// 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)
除非你明白它的作用——不要试图成为一个刺痛者,只要让你免于很多头发拉扯和挠头,这是我自己曾经经历过的:/显然,this.size()
与this.cards.length
不同。查看此
的定义的任何更改都是卡
一个数组或对象(您不应该在数组上的中为…使用。卡
是一个数组。据我所知,for…in
是可以接受的,只要阵列原型没有任何问题。我没有使用任何其他库,所以。。。没关系,对吧?@Kasapo oops,我读了那篇文章,但不够近。具体来说,Martijn评论的这一部分:“如果要迭代对象的键,请使用for(对象中的var键)。但是,如果要迭代数组的元素,请使用for(var i=0;i