广告
返回顶部
首页 > 资讯 > 前端开发 > JavaScript >for of 和 for in 的区别介绍
  • 480
分享到

for of 和 for in 的区别介绍

for of 和 for in 的区别for of 和 for in 的用法区别 2022-12-19 12:12:59 480人浏览 薄情痞子
摘要

目录1.共性2.区别1.两者对比例子(遍历对象)2.两者对比例子(遍历数组)3.特点①. for in 特点简述for in 和 for of 的区别1.共性 for of 和 fo

1.共性

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

2.区别

  • for...in 语句用于遍历数组或者对象的属性(对数组或者对象的属性进行循环操作)。
  • for in得到对对象的key或数组,字符串的下标
  • for offorEach一样,是直接得到值
  • 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 of
   for (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 in 和 for of 的区别

1、推荐在循环对象属性的时候使用 for...in,在遍历数组的时候的时候使用 for...of 
2、for...in 循环出的是 key,for...of 循环出的是 value 
3、注意,for...of 是 es6 新引入的特性。修复了 ES5 引入的 for...in 的不足 
4、for...of 不能循环普通的对象(如通过构造函数创造的),需要通过和 Object.keys()搭配使用

 for in遍历数组的毛病:

1.index索引为字符串型数字,不能直接进行几何运算
2.遍历顺序有可能不是按照实际数组的内部顺序
3.使用for in会遍历数组所有的可枚举属性,包括原型。例如上栗的原型方法method和name属性
所以for in更适合遍历对象,不要使用for in遍历数组。

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

遍历对象

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

到此这篇关于for of 和 for in 的区别的文章就介绍到这了,更多相关for of 和 for in 的区别内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: for of 和 for in 的区别介绍

本文链接: https://www.lsjlt.com/news/175227.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • for of 和 for in 的区别介绍
    目录1.共性2.区别1.两者对比例子(遍历对象)2.两者对比例子(遍历数组)3.特点①. for in 特点简述for in 和 for of 的区别1.共性 for of 和 fo...
    99+
    2022-12-19
    for of 和 for in 的区别 for of 和 for in 的用法区别
  • JavaScript 中for/of,for/in 的详细介绍
    目录在 JavaScript中,for 循环有几种常见的写法 第一种最常规的写法: nums = [1,2,3,4] for (let i=0; i<nums.lengt...
    99+
    2022-11-12
  • JavaScript中for-in和for-of有什么区别
    今天就跟大家聊聊有关JavaScript中for-in和for-of有什么区别,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。JavaScript是什么JavaScript是一种直译式...
    99+
    2023-06-14
  • JS中for,for...in,for...of和forEach的区别和用法实例
    for循环 基本语法格式:  for(初始化变量;条件表达式;操作表达式){         &n...
    99+
    2022-11-12
  • MySQL中in与exists的使用及区别介绍
    先放一段代码 for(int i=0;i<1000;i++){ for(int j=0;j<5;j++){ System.out.println("hello"); } } for...
    99+
    2022-10-18
  • Java中for(;;)和while(true)的区别
    目录1、问题来源2、比较2.1 测试代码for2.2 测试代码while3、结论 1、问题来源 在阅读Java的JDK源码时,发现大部分写源码的大佬多采用for(;;)的方式来死循环...
    99+
    2022-11-12
  • 老生常谈foreach(增强for循环)和for的区别
    首先说一下foreach有的也叫增强for循环,foreach其实是for循环的一个特殊简化版。再说一下foreach的书写格式:for(元素类型  元素名称 : 遍历数组(集合)(或者能进行迭代的)){语句 }foreach虽然...
    99+
    2023-05-31
    增强for循环 foreach for
  • Windows Vista和Windows7的区别介绍
    很明显WIN7好,因为Vista是WIN7的一个过渡产品。很明显的看出,Vista兼具XP和WIN7的特点,而WIN7则颠覆了XP的传统操作方式,为了防止用户一时无法接受WIN7,Vista应运而生…&he...
    99+
    2023-06-03
    vista win7 Windows7 区别 Windows Vista
  • Go 处理大数组使用 for range 和 for 循环的区别
    目录副本复制问题性能对比遍历结构体数组结论前言: 对于遍历大数组而言, for 循环能比 for range 循环更高效与稳定,这一点在数组元素为结构体类型更加明显。 我们知道...
    99+
    2022-06-07
    GO RANGE for 循环 数组
  • foreach和for循环的区别是什么
    本教程操作环境:windows7系统、javascript1.8.5版、Dell G3电脑。1、for循环 和 forEach的区别(1) for循环是通过 生成 数组的索引下标 循环遍历数组的每一个数据元素forEach是 JavaScr...
    99+
    2023-05-14
    javascript for 循环 foreach 前端开发
  • es6中for和foreach的区别有哪些
    这篇文章主要介绍“es6中for和foreach的区别有哪些”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“es6中for和foreach的区别有哪些”文章能帮助大家解决问题。区别:1、forEach...
    99+
    2023-07-04
  • php中for和foreach的区别有哪些
    小编给大家分享一下php中for和foreach的区别有哪些,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!php有什么用php是一个嵌套的缩写名称,是英文超级文本...
    99+
    2023-06-14
  • foreach和for循环的区别有哪些
    这篇文章主要讲解了“foreach和for循环的区别有哪些”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“foreach和for循环的区别有哪些”吧!区别:1、for通过索引来循环遍历每一个数...
    99+
    2023-07-04
  • 简单介绍Git和GitHub的区别
    在软件开发和版本控制的领域,Git和GitHub是两个经常被提及的工具。尽管二者常常被混淆,甚至被认为是同一个概念,他们有着不同的功能和作用。本文将简单介绍Git与GitHub的区别。Git是一款免费开源的分布式版本控制系统。它最初由Lin...
    99+
    2023-10-22
  • Windows8和Windows8 RT版的区别介绍
    Windows 8和Windows 8新设备将于本月26日与全球消费者见面,不过,用户在购买这些设备或软件升级包之前,应充分了解Windows 8不同版本间的区别。数月前,微软宣布将为其即将上市的操作系统W...
    99+
    2022-06-04
    区别 RT
  • PHP中empty()和isset()的区别介绍
    目录二者共同点二者区别1、对于未设置的变量的判断2、对于 "" (空字符串) 的判断3、对于 0 (作为整数的0) 的判断4、对于 0.0 (作为浮点数的0) 的判断5、对于 "0"...
    99+
    2022-11-12
  • Java中&和&&的区别简单介绍
    & 按位运算符,逻辑运算符 && 逻辑运算符 相同点:只要有一端为假,则语句不成立 假设有三个参数 int x = 1; int y = 2; int q =...
    99+
    2022-11-12
  • python中if和elif的区别介绍
    多个if语句是每次单独判断 比如: 例子一 a = 5 if a < 6: #条件1 print(1) if a < 7: #条件2 ...
    99+
    2022-11-12
  • TypeScript中let和var的区别介绍
    目录1、作用域不同2、let没有变量提升3、let变量不能重复声明4、for循环中的let与var1、作用域不同 用var声明的变量,只有函数作用域和全局作用域,没有块级作用域。而l...
    99+
    2022-11-13
  • 基于python for in if 连着写与分开写的区别说明
    如下: links.extend(link for link in get_links(html) if re.match(link_regex, link)) # 上面的语句分...
    99+
    2022-11-11
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作