Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/431.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 循环中for…的奇怪问题_Javascript_Arrays_For Loop_For In Loop - Fatal编程技术网

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