首页 > 其他分享 >JS中的for in和for of

JS中的for in和for of

时间:2023-04-19 09:56:18浏览次数:25  
标签:... 遍历 迭代 对象 JS 循环 属性

在JavaScript中, for...in 和 for...of 都是用于迭代循环的结构:

 

1. for...in 循环:

for...in 循环主要用于遍历对象的可枚举属性。这种循环不仅遍历对象自身的属性,还会遍历原型链上的可枚举属性。它的语法如下:

for (variable in object) {
  // 执行的代码
}

其中 variable 是属性名, object 是要遍历的对象。

注意:虽然 for...in 循环也可以用于遍历数组,但这并不推荐,因为它会遍历数组的所有可枚举属性,包括非索引属性和原型链上的属性。

 

示例:

const obj = { a: 1, b: 2, c: 3 };

for (const key in obj) {
  console.log( ${key}: ${obj[key]} );
}

// 输出:
// a: 1
// b: 2
// c: 3

 


2. for...of 循环:

for...of 循环用于遍历可迭代对象(例如数组、字符串、Map、Set等),这是ES6引入的新特性。它的语法如下:

for (variable of iterable) {
  // 执行的代码
}

其中 variable 是每次迭代时的当前元素, iterable 是要遍历的可迭代对象。

 

示例:

const arr = [1, 2, 3];

for (const value of arr) {
  console.log(value);
}

// 输出:
// 1
// 2
// 3

 

 

  for...in 和 for...of 循环在JavaScript中具有不同的使用场景,它们之间的主要区别如下:

1. 遍历对象:

- for...in :适用于遍历对象的可枚举属性,包括原型链上的属性。它会遍历对象自身的属性以及继承自原型链的可枚举属性。这对于处理对象属性时非常有用。
- for...of :不适用于普通对象,因为它们不是可迭代的。如果需要遍历对象属性,建议使用 for...in 循环。

2. 遍历数组:

- for...in :虽然可以用于遍历数组,但并不推荐。因为 for...in 会遍历所有可枚举属性,包括非索引属性和原型链上的属性。这可能导致意外的结果和性能问题。
- for...of :推荐用于遍历数组,因为它只遍历数组的元素,不会遍历非索引属性或原型链上的属性。

3. 遍历其他可迭代对象(例如字符串、Map、Set):

- for...in :不适用于遍历这些可迭代对象。
- for...of :可以遍历这些可迭代对象,如字符串、Map、Set等。

4. 性能:

- for...in :由于需要遍历对象的原型链,可能导致性能较差。
- for...of :遍历可迭代对象时,性能较好。

 

总结:

- 使用 for...in 循环遍历对象的可枚举属性(包括原型链上的属性)。
- 使用 for...of 循环遍历可迭代对象,如数组、字符串、Map、Set等。
- 在处理数组时,尽量避免使用 for...in 循环,以防止意外的结果和性能问题。

 

在实际应用中,根据数据类型和所需操作来选择合适的循环结构。同时,还可以考虑使用其他迭代方法,如数组的 forEach 、 map 、 filter 等高阶函数。

标签:...,遍历,迭代,对象,JS,循环,属性
From: https://www.cnblogs.com/ronaldo9ph/p/17332209.html

相关文章

  • pytest + yaml 框架 -25.参数化数据支持读取外部文件txt/csv/json/yaml
    前言v1.2.2版本开始,参数化数据支持读取外部文件,文件格式可以支持:txt/csv/json/yaml参数化的实现用例参数化的实现,我设计了2种实现方式参数化方式1:config:name:post示例fixtures:username,passwordparameters:-[test1,'123456']-[t......
  • 好用的字符串搜索库 - Fuse.js
    https://github.com/krisk/Fuse OptionsFollow#BasicOptions#isCaseSensitiveType: booleanDefault: falseIndicateswhethercomparisonsshouldbecasesensitive.#includeScoreType: booleanDefault: falseWhetherthescoreshouldbeincludedinthe......
  • Nodejs的安装与使用
    Nodejs的安装与使用转载请注明来源:http://www.eword.name/Author:ewordEmail:[email protected]一、Centos安装Nodejs1.1、资料准备1.1.1、下载安装包从官网下下载最新的nodejshttps://nodejs.org/en/download/下载#cdopt/#wgethttps://nodejs.org/dist/v10.20.0......
  • Nodejs的安装与使用
    Nodejs的安装与使用转载请注明来源:http://www.eword.name/Author:ewordEmail:[email protected]一、Centos安装Nodejs1.1、资料准备1.1.1、下载安装包从官网下下载最新的nodejshttps://nodejs.org/en/download/下载#cdopt/#wgethttps://nodejs.org/dist/v10.20.0......
  • 在线客服系统访客发送录音功能,在elementui中使用js-audio-recorder实现录音功能,然后上
    访客在聊天界面中可以发送语音,其实就是录音以后,调用上传接口,把录音文件发送给客服。 点击麦克图标以后,展示出一个elementui的dialog弹窗,里面展示四个功能按钮。分别是,开始录音,结束录音,取消录音,发送录音。基本流程就是点开始,然后点结束,再点发送。下面是聊天界面中的dialog弹窗......
  • js-深拷贝和浅拷贝
    浅拷贝:有两种方式,一种是把一个对象里面的所有的属性值和方法都复制给另一个对象,另一种是直接把一个对象赋给另一个对象,使得两个都指向同一个对象。深拷贝:把一个对象的属性和方法一个个找出来,在另一个对象中开辟对应的空间,一个个存储到另一个对象中。两者就在于,浅拷贝只是简单的......
  • It's all but a dream(JSOI2023 追忆)
    联赛220,队线265,哈哈。day0下午先去了华山,进行了一个喝茶???看着联赛270+的队爷们,感觉人类的悲欢并不相通。晚上试机,由于并不会用Vim,计划sublime写+code::blocks调。先配了code::blocks,然后发现并不能运行???查了下发现是xterm没装,尝试自己装一下,然后发现密码并不是123......
  • Node.js入门学习笔记
    NodeJs是js的运行时,意味着可以在浏览器外运行js。可以使用nodejs来构建服务器端应用、CLI应用、WebAPI,甚至用electron构建桌面端应用。使用nvm来管理node版本。在终端输入node进入REPL环境,可以测试和执行代码,mac系统使用control+d退出REPL环境。执行某个js文件:nodexxx.js......
  • JS巩固
    https://www.bilibili.com/video/BV1sN411974w?p=3&spm_id_from=pageDriver&vd_source=b16c9d62fc80d4f0761a959bb9fdb870P3 ......
  • js知识点
    目录js知识点js数据类型数组forEach()补充三元运算函数函数的全局变量和局部变量内置对象和方法自定义对象Date对象Date对象的方法JSON对象EegExp对象MAth对象BOM和DOMBOM弹出框计时相关DOM标签查找间接查找节点操作属性节点获取值操作class的操作事件绑定方法js知识点jsjs的......