for of 和 for in 的区别
for of 和 for in 的区别
- 1.共性
- 2.区别
- 1.两者对比例子(遍历对象)
- 2.两者对比例子(遍历数组)
- 3.特点
- ①. ``for in`` 特点
- ①. ``for of`` 特点
1.共性
for of
和 for in
都是用来遍历的属性
2.区别
for...in
语句用于遍历数组或者对象的属性(对数组或者对象的属性进行循环操作)。for in
得到对对象的key
或数组,字符串的下标for of
和forEach
一样,是直接得到值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 in
和 for 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 的区别相关推荐
- RPC 笔记(01)— RPC概念、调用流程、RPC 与 Restful API 区别
1. 基本概念 PRC 远程过程调用 Remote Procedure Call,其就是一个节点请求另外一个节点提供的服务.当两个物理分离的子系统需要建立逻辑上的关联时,RPC 是牵线搭桥的常见技术手 ...
- C++ 笔记(28)— C++ 中 NULL和 nullptr 的区别
最近看公司代码的时候发现在判断指针是否为空的时候,有的时候用的是 NULL, 有的时候用的是 nullptr 感觉很奇怪,好奇心驱使我查了下两者的区别,发现还是有很多细节需要学习的. 1. NULL ...
- gcc 和 g++ 的联系和区别,使用 gcc 编译 c++
GCC 编译器已经为我们提供了调用它的接口,对于 C 语言或者 C++ 程序,可以通过执行 gcc 或者 g++ 指令来调用 GCC 编译器. 实际使用中我们更习惯使用 gcc 指令编译 C 语言程序 ...
- Python2 与 Python3 区别
Python2.x 与 Python3.x 区别 1. print 函数 Python2 中 print 是语句(statement),Python3 中 print 则变成了函数.在 Python3 ...
- Docker 入门系列(1)- 初识容器,镜像、容器、仓库的区别
Docker 简介 Docker 是一个开源的应用容器引擎,基于 Go 语言 并遵从Apache2.0协议开源. Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级.可移植的容器中,然后发 ...
- HTTP 协议入门 — (TCP/IP协议族、通信传输流、URI 与 URL 的区别、Cookie 状态管理、HTTP 支持的方法、状态码类别、HTTP 首部字段)
TCP/IP协议族 在介绍 HTTP 协议之前,我们先对 TCP/IP 协议族有个大概的了解,TCP/IP 协议从上到下主要分为应用层.传输层.网络层和数据链路层,各层的主要功能如下表所示: 协议层 ...
- python二进制打开(rb)和文本格式打开(r)什么区别?
使用 open() 函数以文本格式打开文件和以二进制格式打开文件,唯一的区别是对文件中换行符的处理不同. 在 Windows 系统中,文件中用 "\r\n" 作为行末标识符(即换行 ...
- python中__dict__与dir()区别
前言 Python下一切皆对象,每个对象都有多个属性(attribute),Python对属性有一套统一的管理方案. __dict__与dir()的区别: dir()是一个函数,返回的是list: _ ...
- java和C#面向对象的区别
问题:C#中的构造函数和java的构造函数一样吗? 答: .net的项目中,写实体Entity属性时,经常会为每一个属性写一对get和set方法,在用到这个实体或是一个类时,通过new实例化一个对象, ...
- 判别模型和生成模型的区别
20210703 https://www.zhihu.com/question/20446337 机器学习"判定模型"和"生成模型"有什么区别? 重点 http ...
最新文章
- kettlejava脚本的api_Java调用自己开发的Kettle plugin插件
- Apache Flink 零基础入门【转】
- SAP C/4HANA到底包含哪些产品?
- LeetCode4. Median of Two Sorted Arrays(二分法)
- Confluence 6 自定义 Decorator 模板的宏和针对高级用户
- linux 脚本 java_linux系统下运行java项目的脚本编写
- win7在计算机中虚拟光驱怎么删除,win7系统删除虚拟光驱的操作方法
- docker镜像加速器
- spark集成hbase与hive数据转换与代码练习
- 真的存在网络钓鱼吗?网络钓鱼技术之HTML走私分析
- Vue+Element表格动态列+表格分页
- part-18 压摆率SR
- windows 7软件
- hiwifi(gee极路由)路由器配置:
- 解决blur与click冲突
- solidworks模型如何进行1/4剖面
- 扎金花大小比较算法(Java版)
- java main 运行_使用maven运行Java Main的三种方法解析
- C语言运算符号优先级别
- 【LaTeX】论文初稿模板
热门文章
- C语言练习第3天---期末练习题
- app逆向(10)| APP的加固与脱壳
- 让你轻松搞懂0-1背包问题(动态规划 C语言版)
- ARM Cortex M0权威指南_PDF电子书下载 带书签目录 高清完整版 http://pan.baidu.com/s/1jGKQSwY MariaDB入门很简单_PDF电子书下载 带
- 微信小程序:正则 input只能输入数字
- 编程语言在那些运用中
- 非主流就业破解就业困境
- PostgreSQL 中大写问题
- 下载地址转换器(支持 迅雷,旋风,快车,Rayfile...)
- 口才盛宴丨 CBK第二阶段第一期训练营正式开营