数组中使用for in循环的问题

js是一门动态语言,而且是弱类型的,这也引来了一些不必要的麻烦,比如说数组的长度不固定,数组也可以像其他语言里的对象一样给它添加属性看下面的例子

var arr = [1,2,3]
arr.name = '李世明'
for(var i = 0 , len = arr.length ; i<len ; i++){
    console.log(arr[i])
}
console.log('数组长度:'len)

上面是正常的使用常规的for循环语句,还有一个用来循环对象的for(var key in obj),假如使用for in以上的arr会出现什么样的结果呢?它会循环4次,没错就是这么怪异,下面来解析一下为什么会这样,解释的不对的话小伙伴们多多指教,下面只是我个人的理解,或许不对

数组本身也是个由键值对组成的,在普通的数组中(没有给数组追加任何属性的情况下比如上面的name属性),验证这点可以使用console.log(arr)和console.dir(arr)验证查看

所以name作为arr的一个用for in显然就会被迭代到,因为他枚举的是键值对,在这个arr的数组中可枚举的属性就4个,看代码

所以在循环数组时应该尽量避开for in 以免发生不必要的麻烦

当然了在ES 2015中可以用for of来替代for in,for of修复了这个bug

 

posted on 2016-11-22 14:23  创一代  阅读(506)  评论(0)    收藏  举报