js中使用for in遍历数组出现问题

js总使用for in遍历json对象数组,却发现在对应的循环内json对象的属性都是undefined。

前面百思不得其解,各种打log发现是遍历后出现的问题。

百度人家说for in 一般用作js对象属性的遍历。数组对象的遍历最好是用for循环。

 

参考链接:https://blog.csdn.net/dreamcarp/article/details/71439026

前端小白,今天遇到了一个很严重bug。真的很小白!!!我对数组使用了for in遍历,然后for in会遍历到数组的后面添加的原型链属性,并不会遍历到原生原型链上的属性!!!并不是简单地便利数组中的数据。

1.对数组用for in时
Array.prototype.istrue = function(value) {return true;}
var a = [1,2];
for(var i in a) {
console.log(a[i]);}
输出结果:
 1
 2
function(value) {return true;}
所以数组的遍历中千万不要用for in,我们一般对对象的遍历使用。同时上面的i变量是string,并不是number

2.一般来说,我们对对象的遍历通常用for in
var a = {"x":1,"y":2};
for(var i in a) {
console.log(a[i]);}
输出结果:
 1
 2

3.对数组的遍历我平时常用的是forEach和map,很方便

4.如果使用了for in遍历数组,就用hasOwnProperty来规避遍历到原型链上的属性或方法
Array.prototype.istrue = function(value) {return true;}
var a = [1,2];
for(var i in a) {
if(a.hasOwnProperty(i){
console.log(a[i]);
})
}
输出结果:
 1
 2

 

在w3school的文档说明,js基础不扎实!

 

posted @ 2018-05-15 15:33  guodaxia  阅读(813)  评论(0)    收藏  举报