JS中的for in和for of

在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 等高阶函数。

原文链接:https://www.cnblogs.com/ronaldo9ph/p/17332209.html

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:JS中的for in和for of - Python技术站

(0)
上一篇 2023年4月20日
下一篇 2023年4月22日

相关文章

  • JavaScript实现烟花特效(面向对象)

    当下,烟花特效是web前端常见的动画效果之一,本攻略将详细介绍如何通过JavaScript编写实现烟花特效。 步骤一:创建HTML文件 在开发本特效之前,首先需要建立一个HTML文件用于展示页面内容。以下是一个基本的HTML模板,用户可以根据需要添加和修改其他元素: <!DOCTYPE html> <html> <head&gt…

    JavaScript 2023年6月10日
    00
  • 详解JavaScript UTC时间转换方法

    详解JavaScript UTC时间转换方法 在JavaScript中,我们通常使用的日期对象保存的是本地时间。但是,在跨时区使用的情况下,UTC时间经常会被使用。要将本地时间转换为UTC时间,或者将UTC时间转换为本地时间,可以使用JavaScript提供的函数来完成。下面介绍JavaScript UTC时间转换的方法。 1. new Date(Date.…

    JavaScript 2023年5月27日
    00
  • jQuery中 DOM节点操作方法大全

    jQuery中 DOM节点操作方法大全 在jQuery中,DOM节点操作是非常常见和重要的,本文将会介绍jQuery中常用的DOM节点操作方法,包括增删改查等操作。 一、添加节点操作 append和appendTo append:向元素内部的最后面添加新的元素 appendTo:将新的元素添加到现有元素的内部的最后面 示例代码如下: // 在id为test的…

    JavaScript 2023年6月10日
    00
  • 深入浅析JavaScript中prototype和proto的关系

    那么我们先来简单介绍一下prototype和proto的概念。 在JavaScript中,每个对象都有一个proto属性,它指向该对象的原型。而原型又拥有一个prototype属性,它指向该原型的构造函数的原型。这里可能有些晦涩难懂,接下来我们通过例子来更详细地解释。 假设我们有如下的一个构造函数: function Person(name) { this.…

    JavaScript 2023年6月10日
    00
  • JS 正则 时间验证

    下面是 “JS 正则 时间验证” 的完整攻略。 什么是正则表达式 正则表达式是一种用来匹配字符串的表达式,常常被用于对文本进行搜索、替换等操作。在 JavaScript 中,我们可以使用正则表达式来检查一个字符串是否符合某种模式,或者从一个字符串中提取出满足某种模式的子字符串。 时间验证正则表达式 时间验证正则表达式用于验证时间格式是否符合预期,我们可以使用…

    JavaScript 2023年6月10日
    00
  • JavaScript 12个有用的数组技巧

    标题:JavaScript 12个有用的数组技巧完整攻略 1.使用forEach替代for循环 ForEach可以在不使用for循环的情况下更简洁、更容易理解的遍历数组内的元素,例如: const numbers = [1, 2, 3, 4, 5]; numbers.forEach((number) => { console.log(number); …

    JavaScript 2023年5月27日
    00
  • 执行上下文

    变量提升与函数提升 变量声明提升 通过var定义(声明)的变量–在定义语句之前就可以访问到 值为undefined console.log(a); //undefined var a = 1; //执行顺序 var a; console.log(a); a = 1; 函数声明提升 通过function声明的函数–在之前就可以直接调用 值为函数定义(对象)…

    JavaScript 2023年4月22日
    00
  • Ajax 表单验证 实现代码

    实现 Ajax 表单验证需要用到以下步骤: 1.编写 HTML 表单 首先,我们需要编写一个含有需要验证的表单的 HTML 文件。例如,以下是一个简单的 HTML 表单: <form id="myForm" method="post" action=""> <label for=&…

    JavaScript 2023年6月10日
    00
合作推广
合作推广
分享本页
返回顶部