ES6 - for of & for in 区别

简介: ES6 - for of & for in 区别

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

Array.prototype.method=function(){
  console.log(this.length);
}
var myArray=[1,2,4,5,6,7]
myArray.name="数组"
for (var index in myArray) {
  console.log(myArray[index]);
}

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

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

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

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

所以for in更适合遍历对象,不要使用for in遍历数组。

那么除了使用for循环,如何更简单的正确的遍历数组达到我们的期望呢(即不遍历method和name),ES6中的for of更胜一筹

Array.prototype.method=function(){
  console.log(this.length);
}
var myArray=[1,2,4,5,6,7]
myArray.name="数组";
for (var value of myArray) {
  console.log(value);
}

记住,for in遍历的是数组的索引(即键名),而for of遍历的是数组元素值。

for of遍历的只是数组内的元素,而不包括数组的原型属性method和索引name。

遍历对象 通常用for in来遍历对象的键名。

Object.prototype.method=function(){
  console.log(this);
}
var myObject={
  a:1,
  b:2,
  c:3
}
for (var key in myObject) {
  console.log(key);
}

for in 可以遍历到myObject的原型方法method,如果不想遍历原型方法和属性的话,可以在循环内部判断一下,hasOwnPropery方法可以判断某属性是否是该对象的实例属性

for (var key in myObject) {
  if(myObject.hasOwnProperty(key)){
    console.log(key);
  }
}

同样可以通过ES5的Object.keys(myObject)获取对象的实例属性组成的数组,不包括原型方法和属性。

Object.prototype.method=function(){
  console.log(this);
}
var myObject={
  a:1,
  b:2,
  c:3
}
Object.keys(myObject).forEach(function(key,index){<br>  console.log(key,myObject[key])<br>})
目录
相关文章
|
应用服务中间件 nginx
Nginx 禁止IP 只允许域名访问
比如别人通过ip或者未知域名访问你的网站的时候,你希望禁止显示任何有效内容,可以给他返回500.目前国内很多机房都要求网站主关闭空主机头,防止未备案的域名指向过来造成麻烦。就可以这样设置:
|
前端开发 微服务
Element-Plus 图标自动导入
Element-Plus 图标自动导入
|
JavaScript 前端开发 大数据
数字太大了,计算加法、减法会报错,结果不正确?怎么办?用JavaScript实现大数据(超过20位的数字)相加减运算。
数字太大了,计算加法、减法会报错,结果不正确?怎么办?用JavaScript实现大数据(超过20位的数字)相加减运算。
已解决 RuntimeError: There is no current event loop in thread ‘Thread-1‘.
Jetson Xavier NX 报错 RuntimeError: There is no current event loop in thread 'Thread-1'.异常错误,已解决
877 0
已解决 RuntimeError: There is no current event loop in thread ‘Thread-1‘.
|
开发工具 Python
Python练手项目-学生成绩管理系统1
之前在最初的学习中,我就写过一个Python的学生管理系统,但是那个很粗糙,很简陋 今天在学习过程中,再次拿出来,重新优化书写 希望对初学者以及需要的朋友有帮助。
328 0
|
4月前
|
存储 运维 Ubuntu
Ubuntu环境下NTP时间同步服务的离线安装方法
以上就是Ubuntu环境下离线安装和配置NTP时间同步服务的全过程。这种有效的操作不仅可为有网络隔离需求的安全重要环境提供参考,同时也能帮助研发、运维人员在同类情况下处理问题。太阳走过万丈高空,而我们通过NTP服务,轻松把握时间,如同手握流沙,控制每一颗时间粒子的行走。
769 23
|
存储 DataWorks 安全
DataWorks产品使用合集之数据视图如何创建
DataWorks作为一站式的数据开发与治理平台,提供了从数据采集、清洗、开发、调度、服务化、质量监控到安全管理的全套解决方案,帮助企业构建高效、规范、安全的大数据处理体系。以下是对DataWorks产品使用合集的概述,涵盖数据处理的各个环节。
|
7月前
|
人工智能 并行计算 Java
一文彻底搞清楚数字电路中的运算器
运算器(ALU)是数字电路的核心组件,负责执行算术和逻辑运算。其设计直接影响计算机系统的性能与效率。本文详细介绍了运算器的基本结构、功能分类、设计原理及实现方法。通过分析1位全加器、多位加法器、减法器的设计,结合74LS181N芯片和Logisim仿真工具的应用,展示了4位加/减法运算器的实现案例。同时探讨了多级运算器集成、标志位应用及现代优化方向,如超前进位加法器和并行计算技术。运算器的设计需兼顾功能完备性和性能优化,未来将向更高集成度和更低功耗发展。
671 0
|
存储 监控 Java
近亿级用户体量高并发实战:大促前压测干崩近百个服务引起的深度反思!
几年前,数百个服务,将堆内存从28GB升配到36GB,引发系统全面OOM的事件。
327 12
|
监控 安全 网络协议
什么是 TACACS/TACACS+ 身份验证?
【5月更文挑战第1天】
1332 1
什么是 TACACS/TACACS+ 身份验证?