javascript数组遍历for in的一些坑

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循环遍历比较好,改天介绍一下。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值