使用for...in
数组的循环并没有错,尽管我可以猜出为什么有人告诉你:
1.)已经有一个用于数组的目的的高阶函数或方法,但具有更多功能和更精简的语法,称为“ forEach”: Array.prototype.forEach(function(element, index, array) {} );
2.)阵列总是有一个长度,但for...in
并forEach
没有为是的任何值执行功能'undefined'
,仅用于具有定义的值的索引。因此,如果仅分配一个值,则这些循环将仅执行一次函数,但是由于枚举了一个数组,因此它的长度将一直到具有定义值的最高索引,但是使用这些值时,该长度可能会被忽略循环。
3.)标准的for循环将执行一个函数的次数与您在参数中定义的次数相同,并且由于对数组进行了编号,因此定义一次执行一次函数的意义更大。与其他循环不同,for循环可以为数组中的每个索引执行函数,无论该值是否已定义。
本质上,您可以使用任何循环,但是您应该确切记住它们的工作方式。了解不同的循环在其上重复的条件,它们各自的功能,并意识到它们或多或少适用于不同的场景。
另外,一般而言,使用此forEach
方法可能比使用for...in
循环更好,因为它更容易编写且具有更多功能,因此您可能想养成仅使用此方法和标准的习惯,但是呼叫。
参见下文,前两个循环仅执行一次console.log语句,而标准的for循环执行指定次数的函数,在这种情况下,array.length = 6。
var arr = [];
arr[5] = 'F';
for (var index in arr) {
console.log(index);
console.log(arr[index]);
console.log(arr)
}
// 5
// 'F'
// => (6) [undefined x 5, 6]
arr.forEach(function(element, index, arr) {
console.log(index);
console.log(element);
console.log(arr);
});
// 5
// 'F'
// => Array (6) [undefined x 5, 6]
for (var index = 0; index < arr.length; index++) {
console.log(index);
console.log(arr[index]);
console.log(arr);
};
// 0
// undefined
// => Array (6) [undefined x 5, 6]
// 1
// undefined
// => Array (6) [undefined x 5, 6]
// 2
// undefined
// => Array (6) [undefined x 5, 6]
// 3
// undefined
// => Array (6) [undefined x 5, 6]
// 4
// undefined
// => Array (6) [undefined x 5, 6]
// 5
// 'F'
// => Array (6) [undefined x 5, 6]