通过实例解析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 相关文章推荐
Javascript面向对象编程(二) 构造函数的继承
Aug 28 Javascript
JS刷新框架外页面七种实现代码
Feb 18 Javascript
jQuery之选择组件的深入解析
Jun 19 Javascript
JS模式之简单的订阅者和发布者模式完整实例
Jun 30 Javascript
基于JS实现简单的样式切换效果代码
Sep 04 Javascript
js表单处理中单选、多选、选择框值的获取及表单的序列化
Mar 08 Javascript
js中 计算两个日期间的工作日的简单实例
Aug 08 Javascript
用vue和node写的简易购物车实现
Apr 25 Javascript
学习使用Bootstrap栅格系统
May 11 Javascript
基于vue配置axios的方法步骤
Nov 09 Javascript
基于jQuery使用Ajax动态执行模糊查询功能
Jul 05 jQuery
微信小程序实现商城倒计时
Nov 01 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
社区(php&&mysql)一
2006/10/09 PHP
php分页思路以及在ZF中的使用
2012/05/30 PHP
支持png透明图片的php生成缩略图类分享
2015/02/08 PHP
微信获取用户地理位置信息的原理与步骤
2015/11/12 PHP
php微信开发接入
2016/08/27 PHP
JavaScript window.setTimeout() 的详细用法
2009/11/04 Javascript
js+xml生成级联下拉框代码
2012/07/24 Javascript
JSONP 跨域访问代理API-yahooapis实现代码
2012/12/02 Javascript
js 获取(接收)地址栏参数值的方法
2013/04/01 Javascript
JQuery1.8 判断元素是否绑定事件的方法
2014/07/10 Javascript
JavaScript之Object类型介绍
2015/04/01 Javascript
js实现touch移动触屏滑动事件
2015/04/17 Javascript
jQuery+Ajax+PHP弹出层异步登录效果(附源码下载)
2016/05/27 Javascript
js数组常用操作方法小结(增加,删除,合并,分割等)
2016/08/02 Javascript
利用jsonp跨域调用百度js实现搜索框智能提示
2016/08/24 Javascript
js简单正则验证汉字英文及下划线的方法
2016/11/28 Javascript
十个免费的web前端开发工具详细整理
2017/09/18 Javascript
Node之简单的前后端交互(实例讲解)
2017/11/14 Javascript
jQuery niceScroll滚动条错位问题的解决方法
2018/02/03 jQuery
详解用Node.js写一个简单的命令行工具
2018/03/01 Javascript
vue-router传参用法详解
2019/01/19 Javascript
nodejs实现的http、https 请求封装操作示例
2020/02/06 NodeJs
Javascript查看大图功能代码实现
2020/05/07 Javascript
浅谈Vue static 静态资源路径 和 style问题
2020/11/07 Javascript
python实现淘宝秒杀脚本
2020/06/23 Python
通过python爬虫赚钱的方法
2019/01/29 Python
Python基本socket通信控制操作示例
2019/01/30 Python
PYTHON如何读取和写入EXCEL里面的数据
2019/10/28 Python
Django通用类视图实现忘记密码重置密码功能示例
2019/12/17 Python
python RSA加密的示例
2020/12/09 Python
草莓巧克力:Shari’s Berries
2017/02/07 全球购物
内容编辑个人求职信
2013/12/10 职场文书
学生喝酒检讨书
2014/02/06 职场文书
提升Nginx性能的一些建议
2021/03/31 Servers
使用Python拟合函数曲线
2022/04/14 Python
Python内置类型集合set和frozenset的使用详解
2022/04/26 Python