for of 和 for in 的区别

  • 1.共性
  • 2.区别
    • 1.两者对比例子(遍历对象)
    • 2.两者对比例子(遍历数组)
  • 3.特点
    • ①. ``for in`` 特点
    • ①. ``for of`` 特点

1.共性

for offor in都是用来遍历的属性

2.区别

  1. for...in 语句用于遍历数组或者对象的属性(对数组或者对象的属性进行循环操作)。
  2. for in得到对对象的key或数组,字符串的下标
  3. for offorEach一样,是直接得到值
  4. for of不能用于对象

1.两者对比例子(遍历对象)

const obj = {a: 1,b: 2,c: 3}for (let i in obj) {console.log(i)    //输出 : a   b  c}for (let i of obj) {console.log(i)    //输出: Uncaught TypeError: obj is not iterable 报错了}

说明: for infor of 对一个obj对象进行遍历,for in 正常的获取了对象的 key值,分别打印 a、b、c,而 for of却报错了。

2.两者对比例子(遍历数组)

   const arr = ['a', 'b', 'c']// for in 循环for (let i in arr) {console.log(i)         //输出  0  1  2}// for offor (let i of arr) {console.log(i)         //输出  a   b   c}

3.特点

①. for in 特点

  • for … in 循环返回的值都是数据结构的 键值名(即下标)。
  • 遍历对象返回的对象的key值,遍历数组返回的数组的下标(key)。
  • for … in 循环不仅可以遍历数字键名,还会遍历原型上的值和手动添加的其他键。
  • 特别情况下, for … in 循环会以看起来任意的顺序遍历键名
  • for in 的 常规属性排序属性
    在ECMAScript规范中定义了 「数字属性应该按照索引值⼤⼩升序排列,字符串属性根据创建时的顺序升序排列。」在这⾥我们把对象中的数字属性称为 「排序属性」,在V8中被称为 elements,字符串属性就被称为 「常规属性」, 在V8中被称为 properties。
function Foo() {this[100] = 'test-100'this[1] = 'test-1'this["B"] = 'bar-B'this[50] = 'test-50'this[9] = 'test-9'this[8] = 'test-8'this[3] = 'test-3'this[5] = 'test-5'this["A"] = 'bar-A'this["C"] = 'bar-C'
}
var bar = new Foo()
for(key in bar){console.log(`index:${key} value:${bar[key]}`)
}
//输出:
index:1 value:test-1
index:3 value:test-3
index:5 value:test-5
index:8 value:test-8
index:9 value:test-9
index:50 value:test-50
index:100 value:test-100
index:B value:bar-B
index:A value:bar-A
index:C value:bar-C

总结一句: for in 循环特别适合遍历对象。

①. for of 特点

  • for of 循环用来获取一对键值对中的值,而 for in 获取的是 键名
  • 一个数据结构只要部署了 Symbol.iterator 属性, 就被视为具有 iterator接口, 就可以使用 for of循环。
  • for of 不同与 forEach, 它可以与 break、continue和return 配合使用,也就是说 for of 循环可以随时退出循环。

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

  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. kettlejava脚本的api_Java调用自己开发的Kettle plugin插件
  2. Apache Flink 零基础入门【转】
  3. SAP C/4HANA到底包含哪些产品?
  4. LeetCode4. Median of Two Sorted Arrays(二分法)
  5. Confluence 6 自定义 Decorator 模板的宏和针对高级用户
  6. linux 脚本 java_linux系统下运行java项目的脚本编写
  7. win7在计算机中虚拟光驱怎么删除,win7系统删除虚拟光驱的操作方法
  8. docker镜像加速器
  9. spark集成hbase与hive数据转换与代码练习
  10. 真的存在网络钓鱼吗?网络钓鱼技术之HTML走私分析
  11. Vue+Element表格动态列+表格分页
  12. part-18 压摆率SR
  13. windows 7软件
  14. hiwifi(gee极路由)路由器配置:
  15. 解决blur与click冲突
  16. solidworks模型如何进行1/4剖面
  17. 扎金花大小比较算法(Java版)
  18. java main 运行_使用maven运行Java Main的三种方法解析
  19. C语言运算符号优先级别
  20. 【LaTeX】论文初稿模板

热门文章

  1. C语言练习第3天---期末练习题
  2. app逆向(10)| APP的加固与脱壳
  3. 让你轻松搞懂0-1背包问题(动态规划 C语言版)
  4. ARM Cortex M0权威指南_PDF电子书下载 带书签目录 高清完整版 http://pan.baidu.com/s/1jGKQSwY MariaDB入门很简单_PDF电子书下载 带
  5. 微信小程序:正则 input只能输入数字
  6. 编程语言在那些运用中
  7. 非主流就业破解就业困境
  8. PostgreSQL 中大写问题
  9. 下载地址转换器(支持 迅雷,旋风,快车,Rayfile...)
  10. 口才盛宴丨 CBK第二阶段第一期训练营正式开营