博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
学JS的心路历程-for of和for in
阅读量:6212 次
发布时间:2019-06-21

本文共 1393 字,大约阅读时间需要 4 分钟。

我们在刚入门JS时候,说到要跑出数组的每个值肯定都是这样子:

 

var arr = [1,2,3,4,5,6];

for(let i = 0;i < arr.length;i++){

console.log(arr[i])

}

在这之后,有出了forEach作为数组原型使用:

 

var arr = [1,2,3,4,5,6];

arr.forEach((item)=>console.log(item));

但是,物件要怎么办呢?我们也可以用forEach吗():

 

var obj = {a:1,b:2,c:3,d:4};

obj.forEach((item)=>console.log(item));

// TypeError: obj.forEach is not a function

看来是不行,幸好后来JS提供了for-in:

 

var obj = {a:1,b:2,c:3,d:4};

for(let item in obj){

console.log(item);

console.log(obj[item])

}

可以看到我们跑出来的都是key值,那数组也能跑吗?

 

var arr = [“a”,“b”,“c”,“d”,“e”,“f”];

for(let item in arr){

console.log(item);

console.log(arr[item]);

}

恩….看起来好像是可以,但是这边要注意到几个for-in陷井。

 

var arr = [“a”,“b”,“c”,“d”,“e”,“f”];

arr.sayHi =“HI!!!“;

for(let item in arr){

console.log(item);

console.log(arr[item]);

}

可以看到说,我们自定义的属性也会被显示出来。

而且for-in的遍历顺序可能会有浏览器上的差异,导致无法以一致的顺序遍历元素,因此MDN建议不要用于数组上:

 

那有没有只能显示数组值的方法呢?

 

有的,ES6推出了for-of,可以在「可迭代的物件」(Array,,Map,Set,String,TypedArray,arguments等)上作使用。

 

var arr = [“a”,“b”,“c”,“d”,“e”,“f”];

arr.sayHi =“HI!!!“;

for(let item of arr){

console.log(item);

}

 

var obj = {a:1,b:2,c:3,d:4};

for(let item of obj){

console.log(item);

}//TypeError: obj is not iterable

所以一般来说没有办法在物件上作使用,若真的不得已要用的话可以这样写:

 

var obj = {a:1,b:2,c:3,d:4};

for(let item of Object.keys(obj)){

console.log(obj[item]);

}

Object.keys(obj)会把所有物件内的key值转为数组,这样我们就能遍历该物件了。

 

不过通常来说,for-in会比较推荐用在物件上,而for-of会推荐用在数组上()。

转载于:https://www.cnblogs.com/lannyQ-Q/p/9956743.html

你可能感兴趣的文章
微信小程序列表加载更多
查看>>
leetcode笔记-1 twosum
查看>>
深浅拷贝
查看>>
sql查询重复记录、删除重复记录方法大全
查看>>
odoo开发笔记 -- 用户配置界面增加模块访问权限
查看>>
instanceof函数内部机制探析
查看>>
linux下phpstorm的快速安装
查看>>
批量删除和批量修改(参数使用list)
查看>>
前端通用框架可行性研究报告之弹窗
查看>>
数据转换
查看>>
IOS在一个程序中启动另一个程序
查看>>
Dubbo初探
查看>>
CDI Features
查看>>
Linux中安装Oracle jdk
查看>>
MFC界面伸缩
查看>>
笔记本搜不到路由无线信号
查看>>
动态规划算法学习总结
查看>>
java 24小时倒计时案例
查看>>
Memcached
查看>>
从点分治到动态点分治
查看>>