首页 > 其他分享 >for...in 和 for...of 的区别:前端开发中的循环语法

for...in 和 for...of 的区别:前端开发中的循环语法

时间:2024-07-16 09:22:16浏览次数:10  
标签:... 遍历 迭代 对象 语法 前端开发 属性

在前端开发中,JavaScript 提供了多种循环语法来遍历数据结构,其中最常见的两种是 for...infor...of。这两者虽然都用于迭代,但它们的用途和行为却有所不同。本文将详细探讨 for...infor...of 的区别,并帮助你在合适的场景中选择正确的循环语法。

1. for...in 语法

for...in 语法主要用于遍历对象的可枚举属性(包括继承的属性)。它的基本语法如下:

for (let key in object) {
  // 使用 key
}

 

示例:

const person = {
  name: 'Alice',
  age: 30,
  job: 'Engineer'
};

for (let key in person) {
  console.log(key);       // 输出属性名:name, age, job
  console.log(person[key]); // 输出属性值:Alice, 30, Engineer
}

 

注意事项:

  • for...in 会遍历对象的所有可枚举属性,包括继承的属性。使用 Object.hasOwnProperty() 方法可以过滤掉继承的属性。
  • 不适用于数组的遍历,因为数组的元素索引可能不是连续的,for...in 不保证遍历的顺序。

2. for...of 语法

for...of 语法用于遍历可迭代对象(如数组、字符串、集合等)。它的基本语法如下:

for (let value of iterable) {
  // 使用 value
}

 

示例:

const numbers = [1, 2, 3, 4, 5];

for (let number of numbers) {
  console.log(number); // 输出数组中的每个元素:1, 2, 3, 4, 5
}

 

示例:

const greeting = 'Hello';

for (let char of greeting) {
  console.log(char); // 输出字符串中的每个字符:H, e, l, l, o
}

 

注意事项:

  • for...of 只能用于可迭代对象。对于不具备迭代器的对象,它会抛出错误。
  • 遍历时,for...of 提供了迭代对象的值,而不是索引或键名。

3. 使用场景

for...in

  • 适合用于遍历对象的属性。
  • 当需要检查或处理对象的所有可枚举属性时使用。

for...of

  • 适合用于遍历数组、字符串或其他可迭代对象的值。
  • 当需要逐个处理集合中的元素时使用。

4. 性能比较

在性能方面,for...of 通常比 for...in 更适合用于遍历数组,因为它直接访问数组元素的值,不涉及对象属性的查找。而 for...in 可能涉及到更多的对象属性查找和继承链的遍历。

5. 总结

  • 使用 for...in 时要记得过滤继承的属性,并意识到它遍历的是对象的键名。
  • 使用 for...of 时要确保你的对象是可迭代的,并且它提供了元素值的直接访问。

标签:...,遍历,迭代,对象,语法,前端开发,属性
From: https://www.cnblogs.com/zx618/p/18304479

相关文章

  • 前端开发中的二分查找算法
    在前端开发中,处理和搜索大量数据时,效率是一个关键因素。二分查找算法是一种高效的查找算法,适用于在有序数组中快速找到目标值。本文将详细介绍二分查找算法的基本原理、实现方法及其在前端开发中的应用。什么是二分查找?二分查找(BinarySearch)是一种在有序数组中查找目标值的算法......
  • 模板——函数模板的基本语法和调用规则
    1.模板函数    1.1分为自动类型堆到和显示指定类型template<classT>voidSwapNum(T&a,T&b){ Ttemp=a; a=b; b=temp;}voidtest01(){ inta=10; intb=20; doublec=30.5; doubled=40.8; SwapNum(a,b);//自动类型推导 SwapNum<in......
  • QUIC(更新中... ...)
     本文档只记录我个人认为应该着重进行一下笔记的部分。RFCQUIC基本内容介绍在RFC9000,加密的实现在9001,丢包检测和拥塞机制在9002。简介是由Google开发的一种基于UDP的传输层协议,旨在提高网络传输的性能和安全性。关键要素:UDP443端口,将TLS1.3内置在QUIC协议报文中,提升了......
  • 数组001 基本语法
    #include<iostream>usingnamespacestd;//1、数组声明方式:////1.1只声明://数据类型数组名[数组长度]:intarr[10];//里面的元素未初始化,显示的结果不确定////1.2声明的时候初始化:////1.2.1数据类型数组名[数......
  • Markdown语法教程
    Markdown语法官网教程一、标题(#越少,标题越粗)#Headinglevel1##Headinglevel2二、加粗(双星号)和斜体(单星号)Ijustlove**boldtext**A*cat*meow【备注】粗斜体用三星号三、引用(>和-)四、代码(`)Atthecommandprompt,type`nano` 五、链接这是一个链......
  • 基础语法
    单行注释//加内容多行注释/内容/文档注释/****/标识符Java中所有的组成部分都需要名字.类名,变量以及方法名都被称为标识符标识符注意点1.所有的标识符都应该以字母(A-Z或者a-z),美元符$或者下划线_开始2.首字符之后可以是以字母(A-Z或者a-z),美元符$,下划线_或者数字的......
  • Kotlin标准函数(语法糖)let with run also apply快速讲解
    目录1、知识储备——扩展函数原理定义扩展函数调用扩展函数2、返回值为上下文对象的标准函数applyalso3、返回值为Lambda表达式结果letrunwith4、一表总结1、知识储备——扩展函数原理Kotlin在不继承父类或实现接口下,也能扩展一个类的新功能定义扩展函数f......
  • Git提交时出现Merge branch ‘master‘ of ...之解决方法
    参考文章:https://gitcode.csdn.net/65ea8a4f1a836825ed794712.html?dp_token=eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpZCI6MTQ1MTY5NywiZXhwIjoxNzIxMjkxNTE4LCJpYXQiOjE3MjA2ODY3MTgsInVzZXJuYW1lIjoibWFudG91eW91eW91In0.-wDA8k8JLiSglywMGl6-Q1FSLkDiWW9_spoG16tpdtA......
  • C++惯用法:do...while(0)的妙用
    目录1.引言2.do...while(0)消除goto语句3.用do...while(0)包裹复杂的宏4.防止意外错误5.避免变量作用域问题1.引言        在C++中,do...while(0) 通常是用来做循环用的,然而我们做循环操作可能用for和while要多一些。经常看到一些开源代码会出现do...while(0)......
  • KEIL出现error: L6002U: Could not open file ...报错
     在对MSPM0L1306进行工程移植时,依照参考方法更新头文件路径后出现一个报错:.\Objects\empty_LP_MSPM0L1306_nortos_keil.axf:error:L6002U:Couldnotopenfile../../../../../../source/ti/driverlib/lib/keil/m0p/mspm0l11xx_l13xx/driverlib.a:Nosuchfileordirec......