js中数组遍历的时候,常见的的是for循环,简单易懂
for (var index = 0; index < myArray.length; index++) {
console.log(myArray[index]);
}
但这样写比较麻烦
也许你想到了用数组的forEach方法遍历
myArray.forEach(function (value) {
console.log(value);
});
短小精悍,简要的表达了效果,但是存在以下几种坑:
1.不能使用 break 语句来跳出循环;
2.不能使用 return 语句来从闭包函数中返回。
还有一种for in循环遍历
for (var index in myArray) {
console.log(myArray[index]);
}
这看起来也很简洁,并且没有forEach的一些毛病;
但是不建议对数组采取这种方法进行遍历,原因在于:
代码中的 index 变量将会是 “0”、”1”、”3” 等这样的字符串,而并不是数值类型。如果你使用字符串的 index 去参与某些运算(”2” + 1 == “21”),运算结果可能会不符合预期。
var myArray=[1,2,3,4,5];
for (var index in myArray) {
console.log(index+1);
}
输出结果如下:
显而易见,index的数据类型是string并不是number,如果对index做些运算,那就尴尬了
还有一个毛病是不仅数组本身的元素将被遍历到,用户自己为数组添加的一些属性也会被遍历到,甚至数组原型链上的属性也可能被遍历到。
var myArray=new Array(1,2,3,4,5);
myArray.name="hello";
Array.prototype.method=function(){
console.log("world");
}
for (var index in myArray) {
console.log(index);
}
输出结果如下:
结果是不是很有意思
还有一个坑是:
在某些情况下,上面代码将会以任意顺序去遍历数组元素,即显示顺序并不是按我们所想的那样。
因此,for-in 设计的目的是用于遍历包含键值对的对象,对数组并不是那么友好。
遍历数组的话还是用es6的for of循环遍历比较好,改天介绍一下。