1. for-in循环

for-in循环主要用于遍历对象,for()中的格式:for(keys in zhangsan){}
keys表示obj对象的每一个键值对的键!!所有循环中,需要使用obj[keys]来取到每一个值!!!for-in 循环,遍历时不仅能读取对象自身上面的成员属性,也能延续原型链遍历出对象的原型属性所以,可以使用hasOwnProperty判断一个属性是不是对象自身上的属性obj.hasOwnProperty(keys)==true 表示这个属性是对象的成员属性,而不是原先属性。

//声明一个Peson类
function Person(){this.name = "张三";this.age = 14;this.func1 = function(){}
}
//实例化这个类
var zhangsan = new Person();
//使用for-in遍历这个对象
for(keys in zhangsan){console.log(zhangsan[keys])
}

2. for-of循环

  ES6 借鉴 C++、Java、C# 和 Python 语言,引入了for…of循环,作为遍历所有数据结构的统一的方法。
  一个数据结构只要部署了Symbol.iterator属性,就被视为具有iterator接口,就可以用for…of循环遍历它的成员。也就是说,for…of循环内部调用的是数据结构的Symbol.iterator方法。
  for…of循环可以使用的范围包括数组、Set 和 Map 结构、某些类似数组的对象(比如arguments对象、DOM NodeList 对象)、后文的 Generator 对象,以及字符串

1. 数组

var arr = ['a', 'b', 'c', 'd'];for (let a in arr) {console.log(a); // 0 1 2 3}for (let a of arr) {console.log(a); // a b c d}

上面代码表明,for…in循环读取键名,for…of循环读取键值。如果要通过for…of循环,获取数组的索引,可以借助数组实例的entries方法和keys方法

2.Set 和 Map 结构

var engines = new Set(["Gecko", "Trident", "Webkit", "Webkit"]);
for (var e of engines) {console.log(e);
}
// Gecko  Trident    Webkitvar es6 = new Map();
es6.set("edition", 6);
es6.set("committee", "TC39");
es6.set("standard", "ECMA-262");
for (var [name, value] of es6) {console.log(name + ": " + value);
}
// edition: 6
// committee: TC39
// standard: ECMA-262

上面代码演示了如何遍历 Set 结构和 Map 结构。值得注意的地方有两个,首先,遍历的顺序是按照各个成员被添加进数据结构的顺序。其次,Set 结构遍历时,返回的是一个值,而 Map 结构遍历时,返回的是一个数组,该数组的两个成员分别为当前 Map 成员的键名和键值。

3.类似数组的对象
类似数组的对象包括好几类。下面是for…of循环用于字符串、DOM NodeList 对象、arguments对象的例子。

// 字符串var str = "hello";for (let s of str) {console.log(s); // h e l l o}
// DOM NodeList对象let paras = document.querySelectorAll("p");for (let p of paras) {p.classList.add("test");}
// arguments对象function printArgs() {for (let x of arguments) {console.log(x);}}
printArgs('a', 'b');// 'a' 'b'

与其他遍历语法的比较

for…in循环有几个缺点
  ①数组的键名是数字,但是for…in循环是以字符串作为键名“0”、“1”、“2”等等。
  ②for…in循环不仅遍历数字键名,还会遍历手动添加的其他键,甚至包括原型链上的键。
  ③某些情况下,for…in循环会以任意顺序遍历键名。
  for…in循环主要是为遍历对象而设计的,不适用于遍历数组。

for…of循环
  有着同for…in一样的简洁语法,但是没有for…in那些缺点。
  不同于forEach方法,它可以与break、continue和return配合使用。
  提供了遍历所有数据结构的统一操作接口

for-in 和 for-of 的区别相关推荐

  1. RPC 笔记(01)— RPC概念、调用流程、RPC 与 Restful API 区别

    1. 基本概念 PRC 远程过程调用 Remote Procedure Call,其就是一个节点请求另外一个节点提供的服务.当两个物理分离的子系统需要建立逻辑上的关联时,RPC 是牵线搭桥的常见技术手 ...

  2. C++ 笔记(28)— C++ 中 NULL和 nullptr 的区别

    最近看公司代码的时候发现在判断指针是否为空的时候,有的时候用的是 NULL, 有的时候用的是 nullptr 感觉很奇怪,好奇心驱使我查了下两者的区别,发现还是有很多细节需要学习的. 1. NULL ...

  3. gcc 和 g++ 的联系和区别,使用 gcc 编译 c++

    GCC 编译器已经为我们提供了调用它的接口,对于 C 语言或者 C++ 程序,可以通过执行 gcc 或者 g++ 指令来调用 GCC 编译器. 实际使用中我们更习惯使用 gcc 指令编译 C 语言程序 ...

  4. Python2 与 Python3 区别

    Python2.x 与 Python3.x 区别 1. print 函数 Python2 中 print 是语句(statement),Python3 中 print 则变成了函数.在 Python3 ...

  5. Docker 入门系列(1)- 初识容器,镜像、容器、仓库的区别

    Docker 简介 Docker 是一个开源的应用容器引擎,基于 Go 语言 并遵从Apache2.0协议开源. Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级.可移植的容器中,然后发 ...

  6. HTTP 协议入门 — (TCP/IP协议族、通信传输流、URI 与 URL 的区别、Cookie 状态管理、HTTP 支持的方法、状态码类别、HTTP 首部字段)

    TCP/IP协议族 在介绍 HTTP 协议之前,我们先对 TCP/IP 协议族有个大概的了解,TCP/IP 协议从上到下主要分为应用层.传输层.网络层和数据链路层,各层的主要功能如下表所示: 协议层 ...

  7. python二进制打开(rb)和文本格式打开(r)什么区别?

    使用 open() 函数以文本格式打开文件和以二进制格式打开文件,唯一的区别是对文件中换行符的处理不同. 在 Windows 系统中,文件中用 "\r\n" 作为行末标识符(即换行 ...

  8. python中__dict__与dir()区别

    前言 Python下一切皆对象,每个对象都有多个属性(attribute),Python对属性有一套统一的管理方案. __dict__与dir()的区别: dir()是一个函数,返回的是list: _ ...

  9. java和C#面向对象的区别

    问题:C#中的构造函数和java的构造函数一样吗? 答: .net的项目中,写实体Entity属性时,经常会为每一个属性写一对get和set方法,在用到这个实体或是一个类时,通过new实例化一个对象, ...

  10. 判别模型和生成模型的区别

    20210703 https://www.zhihu.com/question/20446337 机器学习"判定模型"和"生成模型"有什么区别? 重点 http ...

最新文章

  1. 软件项目管理面面观之“玩的就是心跳”
  2. 利用SSH端口转发功能实现X转发
  3. Java:自定义异常处理类
  4. 多云和混合云_多云互操作性!=云服务聚合
  5. (48)FPGA面试技能提升篇(数字采样、射频存储、频谱搬移)
  6. 从零开始学Go之并发(四):互斥
  7. JavaSE基础——构造方法 对象的创建步骤 static关键字
  8. MaxtoCode 1.10 普及版 开发已经接近尾声
  9. 史上最全的Linux常用命令汇总(超全面!超详细!)收藏这一篇就够了!
  10. Unity3D 虚拟现实开发(一)
  11. HTML基础-综合案例1-学生信息表
  12. arcgis做dijkstra_GIS最短路径分析中Dijkstra算法的优化
  13. QQ群关键字提醒设置
  14. 五大车载操作(VOS)系统优劣对比,车载系统架构分析-QNX系统性能分析
  15. 数字三角形 计算最大路径 动态规划
  16. 【实战项目】基于BP神经网络的温度预测(附源码)
  17. 金立android怎么升级到7.o,金立手机怎么刷机?只需七步轻松刷机
  18. 单片机寻迹小车ppt_基于单片机循迹小车的设计.doc
  19. 单件模式之可乐瓶实现
  20. SpringBoot 错误页面使用、自定义错误页、自定义异常、自定义异常解析器

热门文章

  1. python3之路 基础
  2. 漫谈程序员系列:一张图道尽程序员的出路
  3. 盘点国内那些深度学习框架:清华计图Jittor、腾讯优图NCNN、百度飞桨PaddlePaddle、阿里X-DeepLearning
  4. 《数字货币交易所架构初探》— PPIO Code Talks 第二期续
  5. plotclock绘图钟也可以画小猪佩奇
  6. tensorflow零基础入门学习
  7. Mysql加密身份证号
  8. 文献翻译__人工智能时代医学图像重建中的凸优化算法(第4、5、6章)
  9. day15 algo82、83、85、91、92、93、94
  10. WEBRTC音视频实时互动技术