通过实例解析JavaScript for in及for of区别


Posted in Javascript onJune 15, 2020

对数组的遍历大家最常用的就是for循环,ES5的话也可以使用forEach,ES5具有遍历数组功能的还有map、filter、some、every、reduce、reduceRight等,只不过他们的返回结果不一样。但是使用foreach遍历数组的话,使用break不能中断循环,使用return也不能返回到外层函数。

那么接下来我们一起看一下for in 和for of 的区别吧。

for in

看一个简单的例子

//for in 应用于数组
Array.prototype.sayHello = function(){
  console.log("Hello")
}
Array.prototype.str = 'world';
var myArray = [1,2,10,30,100];
myArray.name='数组';
 
for(let index in myArray){
  console.log(index);
}
//输出结果如下
0,1,2,3,4,name,str,sayHello
 
//for in 应用于对象中
Object.prototype.sayHello = function(){
  console.log('Hello');
}
Obeject.prototype.str = 'World';
var myObject = {name:'zhangsan',age:100};
 
for(let index in myObject){
  console.log(index);
}
//输出结果
name,age,str,sayHello
//首先输出的是对象的属性名,再是对象原型中的属性和方法,
//如果不想让其输出原型中的属性和方法,可以使用hasOwnProperty方法进行过滤
for(let index in myObject){
  if(myObject.hasOwnProperty(index)){
    console.log(index)
  }
}
//输出结果为
name,age
//你也可以用Object.keys()方法获取所有的自身可枚举属性组成的数组。
Object.keys(myObject)

可以看出for in 应用于数组循环返回的是数组的下标和数组的属性和原型上的方法和属性,而for in应用于对象循环返回的是对象的属性名和原型中的方法和属性。

使用for in 也可以遍历数组,但是会存在以下问题:

1.index索引为字符串型数字,不能直接进行几何运算

2.遍历顺序有可能不是按照实际数组的内部顺序

3.使用for in会遍历数组所有的可枚举属性,包括原型。例如上栗的原型方法method和name属性

Object.prototype.sayHello = function(){
  console.log('Hello');
}
var myObject = {
  name:'zhangsan',
  age:10
}
 
for(let key of myObject){
  consoloe.log(key);
}
//输出结果
//typeError
 
Array.prototype.sayHello = function(){
  console.log("Hello");
}
var myArray = [1,200,3,400,100];
for(let key of myArray){
  console.log(key);
}
//输出结果
1,200,3,400,100

for in遍历的是数组的索引(即键名),而for of遍历的是数组元素值。 所以for in更适合遍历对象,不要使用for in遍历数组。JavaScript for in 和 for of 的区别

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
js中widow.open()方法使用详解
Jul 30 Javascript
JS JSON对象转为字符串的简单实现方法
Nov 18 Javascript
使用js dom和jquery分别实现简单增删改
Sep 11 Javascript
简单谈谈javascript中的变量、作用域和内存问题
Aug 30 Javascript
EasyUi中的Combogrid 实现分页和动态搜索远程数据
Apr 01 Javascript
JavaScript的Backbone.js框架入门学习指引
May 07 Javascript
vue脚手架及vue-router基本使用
Apr 09 Javascript
jQuery中each遍历的三种方法实例分析
Sep 07 jQuery
浅谈关于JS下大批量异步任务按顺序执行解决方案一点思考
Jan 08 Javascript
详解Vue前端生产环境发布配置实战篇
May 07 Javascript
详解element-ui级联菜单(城市三级联动菜单)和回显问题
Oct 02 Javascript
vue实现编辑器键盘抬起时内容跟随光标距顶位置向上滚动效果
May 28 Javascript
vue proxy 的优势与使用场景实现
Jun 15 #Javascript
原生JS利用transform实现banner的无限滚动示例代码
Jun 15 #Javascript
koa中间件核心(koa-compose)源码解读分析
Jun 15 #Javascript
为react组件库添加typescript类型提示的方法
Jun 15 #Javascript
JavaScript中的全局属性与方法深入解析
Jun 14 #Javascript
Vue使用Three.js加载glTF模型的方法详解
Jun 14 #Javascript
浅谈Vue 自动化部署打包上线
Jun 14 #Javascript
You might like
re0第二季蕾姆被制作组打入冷宫!艾米莉亚女主扶正,原因唏嘘
2020/04/02 日漫
PHP中开发XML应用程序之基础篇 添加节点 删除节点 查询节点 查询节
2010/07/09 PHP
将二维数组转为一维数组的2种方法
2014/05/26 PHP
浅谈socket同步和异步、阻塞和非阻塞、I/O模型
2016/12/15 PHP
PHP XML Expat解析器知识点总结
2019/02/15 PHP
让广告代码不再影响你的网页加载速度
2006/07/07 Javascript
js window.event对象详尽解析
2009/02/17 Javascript
基于javascript实现图片懒加载
2016/01/05 Javascript
微信小程序 后台https域名绑定和免费的https证书申请详解
2016/11/10 Javascript
vuejs父子组件通信的问题
2017/01/11 Javascript
Angularjs处理页面闪烁的解决方法
2017/03/09 Javascript
基于node.js制作简单爬虫教程
2017/06/29 Javascript
解析Vue.js中的组件
2018/02/02 Javascript
解决vue项目报错webpackJsonp is not defined问题
2018/03/14 Javascript
vue的diff算法知识点总结
2018/03/29 Javascript
通过实例了解JS 连续赋值
2019/09/24 Javascript
nodejs环境使用Typeorm连接查询Oracle数据
2019/12/05 NodeJs
[52:39]完美世界DOTA2联赛PWL S3 CPG vs Forest 第一场 12.16
2020/12/17 DOTA
Python内置函数bin() oct()等实现进制转换
2012/12/30 Python
Django中URL视图函数的一些高级概念介绍
2015/07/20 Python
python使用pyqt写带界面工具的示例代码
2017/10/23 Python
python 中如何获取列表的索引
2019/07/02 Python
pandas实现excel中的数据透视表和Vlookup函数功能代码
2020/02/14 Python
详解在Python中使用Torchmoji将文本转换为表情符号
2020/07/27 Python
Old Navy加拿大官网:美式休闲服饰品牌
2017/09/26 全球购物
亚马逊海外购:亚马逊美国、英国、日本、德国直邮
2021/03/18 全球购物
描述JSP和Servlet的区别、共同点、各自应用的范围
2012/10/02 面试题
实习自荐信
2013/10/13 职场文书
制衣厂各岗位职责
2013/12/02 职场文书
优秀教师的感人事迹
2014/02/04 职场文书
护理专科自荐书范文
2014/02/18 职场文书
乡镇纠风工作实施方案
2014/03/22 职场文书
房产公证书样本
2015/01/23 职场文书
创先争优活动个人总结
2015/03/04 职场文书
2015年质量管理工作总结范文
2015/05/18 职场文书
微前端qiankun改造日渐庞大的项目教程
2022/06/21 Javascript