Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/381.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..in()循环不';是否返回数组中的对象?_Javascript_Arrays_Angularjs - Fatal编程技术网

Javascript 为什么for..in()循环不';是否返回数组中的对象?

Javascript 为什么for..in()循环不';是否返回数组中的对象?,javascript,arrays,angularjs,Javascript,Arrays,Angularjs,我在一个角度控制器中有这样一段代码: for (var obj in $scope.items) { obj.done = false; } 以下是我的$scope.items的外观: $scope.items = [ { name: "Task #1", done: false }, { name: "Task #2", done: false } ]; 我觉得奇怪的是,我的for循环实际上不起作用obj不是循环中的对象。我尝试对obj

我在一个角度控制器中有这样一段代码:

for (var obj in $scope.items) {
   obj.done = false;
}
以下是我的
$scope.items
的外观:

$scope.items = [
  {
    name: "Task #1",
    done: false
  },
  {
    name: "Task #2",
    done: false
  }
];

我觉得奇怪的是,我的for循环实际上不起作用
obj
不是循环中的对象。我尝试对
obj
变量执行
console.log
,它打印出数组
$scope.items
的索引。为什么会这样?既然这是一个
foreach
循环,那么
obj
不应该是
$scope.items

中的每个对象吗。。在
中,迭代键(或索引),而不是值。你应该做:

for (var index in $scope.items) {
    $scope.items[index].done = false;
}
一般来说,它被认为是使用<代码>用于。。在中迭代数组。您可以改用
forEach
方法:

$scope.items.forEach(function (item) {
    item.done = false;
});

用于。。在
中,迭代键(或索引),而不是值。你应该做:

for (var index in $scope.items) {
    $scope.items[index].done = false;
}
一般来说,它被认为是使用<代码>用于。。在中迭代数组。您可以改用
forEach
方法:

$scope.items.forEach(function (item) {
    item.done = false;
});
用于对象的..in

var foo = { a: 5, b: 7 };
for (var x in foo) {
    console.log(x);
}
// -> a
// -> b
如果需要属性值,只需使用以下名称在对象中查找属性:

var foo = { a: 5, b: 7 };
for (var x in foo) {
    var value = foo[x];
    console.log(value);
}
// -> 5
// -> 7
但是,对于数组,使用其属性在其元素上迭代不是一个好主意。如果向数组中添加常规属性,例如:

var arr = [ 1, 2, 3 ];
arr.myProp = "someValue";
然后
myProp
也会出现在
for..in
循环中,这通常是不需要的。相反,强烈建议使用常规的
for
循环或使用
数组对数组进行迭代。forEach

arr.forEach(function(value, index) {
    console.log(value);
})
// -> 1
// -> 2
// -> 3
用于对象的..in

var foo = { a: 5, b: 7 };
for (var x in foo) {
    console.log(x);
}
// -> a
// -> b
如果需要属性值,只需使用以下名称在对象中查找属性:

var foo = { a: 5, b: 7 };
for (var x in foo) {
    var value = foo[x];
    console.log(value);
}
// -> 5
// -> 7
但是,对于数组,使用其属性在其元素上迭代不是一个好主意。如果向数组中添加常规属性,例如:

var arr = [ 1, 2, 3 ];
arr.myProp = "someValue";
然后
myProp
也会出现在
for..in
循环中,这通常是不需要的。相反,强烈建议使用常规的
for
循环或使用
数组对数组进行迭代。forEach

arr.forEach(function(value, index) {
    console.log(value);
})
// -> 1
// -> 2
// -> 3

for..in
所做的是迭代对象的属性,而不是数组的元素。如果你想迭代一个数组,那么你应该使用normal
for
loop
for(var i=0;ifor.
的作用是迭代对象的属性,而不是数组的元素。如果你想迭代一个数组,那么你应该使用normal
for
loop
for(var i=0;i