通过实例解析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 相关文章推荐
jQuery.Validate验证库的使用介绍
Apr 26 Javascript
parentElement,srcElement的使用小结
Jan 13 Javascript
Js表格万条数据瞬间加载实现代码
Feb 20 Javascript
JavaScript获取当前网页最后修改时间的方法
Apr 03 Javascript
纯javascript判断查询日期是否为有效日期
Aug 24 Javascript
50 个 jQuery 插件可将你的网站带到另外一个高度
Apr 26 Javascript
require.js 加载 vue组件 r.js 合并压缩的实例
Oct 14 Javascript
JavaScript 函数节流详解及方法总结
Feb 09 Javascript
[js高手之路]原型式继承与寄生式继承详解
Aug 28 Javascript
详解在不使用ssr的情况下解决Vue单页面SEO问题
Nov 08 Javascript
微信小程序select下拉框实现效果
May 15 Javascript
简单了解JS打开url的方法
Feb 21 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
定制404错误页面,并发信给管理员的程序
2006/10/09 PHP
PHP中开发XML应用程序之基础篇 添加节点 删除节点 查询节点 查询节
2010/07/09 PHP
使用PHPMailer实现邮件发送代码分享
2014/10/23 PHP
自己写的兼容低于PHP 5.5版本的array_column()函数
2014/10/24 PHP
Javascript this关键字使用分析
2008/10/21 Javascript
javascript 动态table添加colspan\rowspan 参数的方法
2009/07/25 Javascript
JavaScript 面向对象编程(1) 基础
2010/05/18 Javascript
js自动下载文件到本地的实现代码
2013/04/28 Javascript
js弹出层永远居中实现思路及代码
2013/11/29 Javascript
什么是cookie?js手动创建和存储cookie
2014/05/27 Javascript
javascript实现给定半径求出圆的面积
2015/06/26 Javascript
纯javascript模仿微信打飞机小游戏
2015/08/20 Javascript
使用json来定义函数,在里面可以定义多个函数的实现方法
2016/10/28 Javascript
微信小程序组件 marquee实例详解
2017/06/23 Javascript
深入浅出webpack教程系列_安装与基本打包用法和命令参数详解
2017/09/10 Javascript
[01:03:51]2018DOTA2亚洲邀请赛 4.7 淘汰赛 VP vs LGD 第三场
2018/04/09 DOTA
Python MD5文件生成码
2009/01/12 Python
Python操作SQLite简明教程
2014/07/10 Python
python求列表交集的方法汇总
2014/11/10 Python
python随机生成指定长度密码的方法
2015/04/04 Python
Python实现的中国剩余定理算法示例
2017/08/05 Python
详解移动端HTML5音频与视频问题及解决方案
2018/08/22 HTML / CSS
彪马加拿大官网:PUMA加拿大
2018/10/04 全球购物
Nebula美国官网:便携式投影仪
2019/03/15 全球购物
Android面试题及答案
2015/09/04 面试题
系统管理员的职责包括那些?管理的对象是什么?
2016/09/20 面试题
支行行长岗位职责
2015/02/15 职场文书
中学生综合素质自我评价
2015/03/06 职场文书
第一节英语课开场白
2015/06/01 职场文书
跟班学习心得体会(共6篇)
2016/01/23 职场文书
一波干货,会议主持词开场白范文
2019/05/06 职场文书
2019年最新借条范本!
2019/07/08 职场文书
Python基础之数据结构详解
2021/04/28 Python
关于python类SortedList详解
2021/09/04 Python
CSS font-variation 可变字体的魅力(实例详解)
2022/03/03 HTML / CSS
PostgreSQL并行计算算法及参数强制并行度设置方法
2022/04/07 PostgreSQL