JS中的for in和for of

这篇具有很好参考价值的文章主要介绍了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.toymoban.com/news/detail-419187.html

到了这里,关于JS中的for in和for of的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • ES6 - Iterator迭代器和for...of 循环

    JavaScript 原有的表示“集合”的数据结构,主要是数组( Array )和对象( Object ),ES6 又添加了 Map 和 Set 。用户还可以组合使用它们,定义自己的数据结构,比如数组的成员是 Map , Map 的成员是对象。这样就需要一种统一的接口机制,来处理所有不同的数据结构。 遍历器(

    2024年02月14日
    浏览(20)
  • for in和for of的区别

    for in 使用于可枚举的数据 如 对象 数组 字符串 什么是可枚举的:属性的enumerable值为true,表示可枚举 可以通过es7新增的属性 Object.getOwnPropertyDescriptors()验证 查看 Object.getOwnPropertyDescriptor() 方法用于 返回 指定 对象 上一个自有 属性 对应的属性描述符 看下图打印的信息,enu

    2024年02月07日
    浏览(27)
  • 数组的5种遍历(for循环、for...in、for...of、forEach()、map()

    数组:内存中一块连续的存储单元,这些存储单元具有共同的名称,不同的索引(下标)。 数组5种遍历: 1、for循环        任何数组都可以使用for循环进行遍历,使用频率最高                                 for (let i = 0; i arr.length; i++) {                            

    2024年02月06日
    浏览(34)
  • 无涯教程-Javascript - For...in循环语句

    for ... in 循环用于循环访问对象的属性,由于无涯教程尚未讨论 Objects 对象,您就会发现此循环非常有用。 “ for...in”循环的语法为: 在每次迭代中,将 object 对象中的一个属性分配给 variablename 变量,此循环一直进行到对象的所有属性。 请尝试以下示例来实现\\\" for-in\\\"循环,它

    2024年02月16日
    浏览(31)
  • 你理解了for-in 和 for-of 吗?他们有什么区别?

    【前言】 在 JavaScript 中,for 循环语句是编写复杂程序时经常使用的一种工具。其中,for-in 和 for-of 是两个最常用的变体。尽管这两者非常相似,但它们在迭代对象方面有所不同。在本文中,我们将探讨 for-in 和 for-of 的不同之处,以及如何正确使用它们。 【正文】 一、for-

    2024年02月09日
    浏览(27)
  • 将 Jupyter Notebook 用于 JavaScript (使用 Node.js 或 Deno 环境)

    熟悉 Python 的读者, 可能同样对 IPython 或 Jupyter 等项目 (如 Jupyter Notebook) 有所耳闻. 正如其名, IPython 项目让 Python 这门语言变得 “interactive”; 如: 交互式的 Shell 程序, 对交互式数据可视化以及 GUI 工具集的支持等等 (具体可见 IPython 项目的网站). 比如在 Notebook 中, 用户可以实现

    2024年02月07日
    浏览(33)
  • JS中for---in的用法

    for in 循环是一种特殊类型的循环,也是普通 for 循环的变体,主要用来遍历对象,也可以遍历数组(但是不推荐),使用它可以将对象中的属性依次循环出来,其语法格式如下: 控制台输出如下: 可以发现此时每次打印的key就是obj中的属性名,obj表示打印obj这个对象 可能

    2024年02月12日
    浏览(25)
  • 用于图像恢复的图像层次结构的高效和显式建模Efficient and Explicit Modelling of Image Hierarchies for Image Restoration

    本文的目的是提出一种机制,在 全局、区域和局部 范围内高效、明确地对图像层次结构进行建模,以 进行图像恢复 。为实现这一目标,我们首先分析自然图像的两个重要属性,包括 跨尺度相似性和各向异性图像特征 。受此启发,我们提出了anchored stripe self-attention,它在

    2024年02月06日
    浏览(34)
  • Accurate 3D Prediction of Missing Teeth in Diverse Patterns for Precise Dental Implant Planning

    近年来,由于种植体的高成功率和美观优势,对种植体的需求激增。 然而,由于牙齿结构的复杂性和牙齿脱落模式的可变性,准确预测缺失牙齿的精确数字种植计划仍然是一个挑战。本研究提出了一种新的框架,用于准确预测不同模式的缺牙,促进数字化种植计划。提出的框

    2024年01月23日
    浏览(36)
  • 论文阅读RangeDet: In Defense of Range View for LiDAR-based 3D Object Detection

    论文:https://arxiv.org/pdf/2103.10039.pdf 代码:https://github.com/tusen-ai/RangeDet 提出了一个名为RangeDet的新型3D物体检测技术,利用激光雷达数据。 RangeDet的核心在于使用了一种紧凑的表示方法,称为范围视图,与其他常用方法相比,它避免了计算误差。 根据论文中的讨论,使用范围视

    2024年04月13日
    浏览(39)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包