前一段时间我碰到一个这样的问题:随便使用for..in和for..of给我带来了不可预期的后果,和我想得有点不太一样。关于for...in和for..of之间到底有什么区别?什么时候用for..in?什么时候用for..of呢?接下来,我将用代码作为示例来展示它们两者的差别。

首先看看遍历数组时 for...in和for...of的区别:

由上可知,控制台输出结果可以正常显示,对数组进行遍历时,for..in获取到的是每次遍历项的索引值,而for...of每次遍历获取到的则是每一个遍历项的value值。

在看看关于遍历对象时 for..in和for..of的区别:

通过控制台我们可以看出,使用for...in遍历对象时,每一次遍历得到的都是对象中的key值,而使用for..of遍历时则会报错(obj is not iterable),译为:obj这个对象不可迭代的,不能使用for..of遍历对象,它获取到的不是每一个遍历项的value值。

总结:

遍历数组时:for..in获取到的是每一项的索引值,而for..of获取到的是每一项的值

遍历对象时:for..in获取到的是每一项的key值(也就是属性名),而for..of不能用于遍历对象,会报错

扩展内容:Object.keys(obj)可以获取到obj的keys值,用数组形式保存;Object.values(obj)可以获取到obj的value值,也是用数组形式保存

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. 2018-3-10论文(网络评论非结构化信息表示与应用研究)笔记-----基于证据理论的综合评价模型建立
  2. 怎样去判断一个网站是不是伪静态网站
  3. 沟通无国界,云信助力译牛构建远程会议同传新模式
  4. 【转】React 16 中从 setState 返回 null 的妙用
  5. dibian+9+oracle+java_debian – 安装了Oracle Java,但在安装软件时,我得到了`你的Java版本不受支持....
  6. 2020 年“我爱计算机视觉”视频号最受欢迎视频 Top10!
  7. 苹果iPhone 13 Pro机型有望采用LTPO技术屏幕 支持120Hz刷新率
  8. 游戏世界观构建_我们如何构建技术落后的世界
  9. [Hacking]国内首届黑客大会COG2011现场报道(补)
  10. tomcat7插件的引入
  11. FPGA MCU FSMC通信接口——NAND Flash模式
  12. 软件工程-软件维护/系统维护
  13. 点云采样FPS原理及实现
  14. matlab 梯度下降 求偏导,吴恩达机器学习课程课时12梯度下降算法中参数θ0,θ1求偏导...
  15. 2021年国内PT站点汇总(中英文名称对照表)很全呦!
  16. vue滑杆_非常简单的Vue滑杆组件
  17. 外部表报错:ORA-29913: 执行 ODCIEXTTABLEOPEN 调出时出错 ORA-29400: 数据插件错误KUP-04043: table column not found in ext
  18. Genesis公链加速区块链行业发展
  19. 解决Mysql:Incorrect string value: '\xF0\x9F\x8D\x83\xF0\x9F...' for column
  20. 【Java】电报 Telegram messenger for Android

热门文章

  1. “公共电子围栏”在京落地,有望进一步规范共享单车用户出行行为
  2. CF Edu 47E. InterCity Travelling 期望线性,打表
  3. 基于区块链技术,机器市场经济来临
  4. sqlserver索引的原理及索引建立的注意事项小结
  5. 如何做好项目管理工作?
  6. P1332 血色先锋队
  7. 一个循环实现冒泡法排序(并没有什么卵用)
  8. 基于Java的农产品销售管理系统设计与实现
  9. Java练习使用ActionListener
  10. openLayers实现地名地址搜索及展示