for in / for of / forEach 循环

2023-11-17

1. for 循环

for 循环的最大缺点是需要跟踪计数器和退出条件。
虽然 for 循环在循环数组时的确具有优势,但是某些数据结构不是数组,因此并非始终适合使用 loop 循环。

const digits = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9];
for (let i = 0; i < digits.length; i++) {
  console.log(digits[i]);
}

2. for…in 循环

依然需要使用 index 来访问数组的值
当你需要向数组中添加额外的方法(或另一个对象)时,for…in 循环会带来很大的麻烦。因为 for…in 循环循环访问所有可枚举的属性,意味着如果向数组的原型中添加任何其他属性,这些属性也会出现在循环中。

const digits = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9];

for (const index in digits) {
  console.log(digits[index]);
}

3. forEach 循环

forEach 循环 是另一种形式的 JavaScript 循环。但是,forEach() 实际上是数组方法,因此只能用在数组中。也无法停止或退出 forEach 循环。如果希望你的循环中出现这种行为,则需要使用基本的 for 循环。

4. for…of循环

for…of循环是最新添加到 JavaScript 循环系列中的循环。
它结合了其兄弟循环形式 for 循环和 for…in 循环的优势,可以循环任何可迭代(也就是遵守可迭代协议)类型的数据。默认情况下,包含以下数据类型:String、Array、Map 和 Set,注意不包含 Object 数据类型(即 {}), 默认情况下,对象不可迭代

  • for…of 循环用于循环访问任何可迭代的数据类型
  • for…of 循环的编写方式和 for…in 循环的基本一样,只是将 in 替换为 of,可以忽略索引
  • for…of 循环解决了 for 和 for…in 循环的不足之处,你可以随时停止或退出 for…of 循环
  • 不用担心向对象中添加新的属性。for…of 循环将只循环访问对象中的值。
const digits = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9];

for (const digit of digits) {
  console.log(digit);
}

5. const 在 for in 或者for of 中的使用

const声明的变量在一个块级作用域中是不能够重新赋值。

  • for循环当中使用const会报错
  • 在for of或者for in当中使用就不会产生错误

原因:for in 和for of它们两个都是一种严格的迭代语句,对于对象中的每一个属性值,有一个指定的语句块被执行。也就是每一次循环,都会产生一个块级作用域来完成每个变量的行为;

然而for循环并不会遍历对象的属性,每一次循环都是在同个块级作用域中进行,使用const声明就会报错。所以在for in或者for of当中,推荐使用const来确保访问到的属性值不会被后续语句所改变。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

for in / for of / forEach 循环 的相关文章

  • 在 JavaScript 中生成 RSA 密钥对

    我最近发现了这个 RSA JavaScript 库 http www ohdave com rsa http www ohdave com rsa 但是 它要求预先生成密钥 这是我的问题 问题 我想在 JavaScript 中生成 RSA
  • pubnub 和 head.js

    有没有人成功整合过pubnub http www pubnub com 和 head js 正确吗 Pubnub http www pubnub com 希望我将他们的脚本放在页面底部并带有 div 就在它前面的标签 这可以确保在最后调用
  • 第一次使用node.js - “ReferenceError:节点未定义”

    我刚刚安装了node js 我尝试编写应该检查版本的node v 但它不起作用 这是输出 gt node v ReferenceError node is not defined at repl 1 2 at REPLServer self
  • ajaxStop() 不触发

    这是不起作用的代码 document ajaxStop function this unbind ajaxStop prevent running again when other calls finish Display everythi
  • 在 javascript、jQuery 或 css 中,如何让 div 或 iframe 展开以填充其余空间

    我有三个 iframe 我将顶部 iframe 设置为 50px 高度 将底部 iframe 设置为 50px 但我希望中间 iframe 扩展以填充其余空间 有没有一种技术可以用来对任何窗口屏幕尺寸执行此操作 谢谢 example
  • window.onbeforeunload 在 Android Chrome 上不会触发 [alt.解决方案?]

    我开发了一个简单的聊天应用程序 我正在使用 window onbeforeunload当有人关闭选项卡 浏览器时 基本上是当用户离开房间时 通知其他用户 这是我的代码 scope onExit function scope chatstat
  • 以一定时间间隔连续重复运行 JavaScript 函数

    这是我的第一个问题 希望您尽快回答 我想要代码连续重复一个函数 我尝试了一些代码 但没有成功 我尝试了这段代码 我想在一段时间后重复这个功能 我努力了setInterval and setTimeout 但是 我还没有收到结果 这将重复该任
  • 为什么 length 是 `Array` 的属性而不是 `Array.prototype` 链

    所以我在 V8 控制台上玩了很多 我做到了 Object getOwnPropertyNames 我期望得到 结果 然而 length 所以这意味着不是成为原型链的一部分 length是所有人的成员财产Array对象 这是一个错误 还是有任
  • 如何以编程方式退出或关闭 Javascript UWP 应用程序? (Windows 10)

    我制作了一个游戏 它需要自己的退出按钮 我无法使用CoreApplication Exit https msdn microsoft com en us library windows apps windows applicationmod
  • 如何使用 Angular JS 单击时将 html 模板附加到 div/指令?

    我有这种情况
  • 通过JS Laravel访问存储目录

    有没有办法访问storage目录 该目录已经链接到publicJS 中的目录 我正在尝试制作一个上传图片的表单 验证脚本 if request gt hasFile photos marker gt photos request gt ph
  • 了解 JavaScript - 资源

    使用 StackOverflow 的微型 Digit Blog 功能进行描述here https stackoverflow com about 我想发布以下我刚刚看到的 我觉得很有趣的谷歌技术谈话视频 我一直在理解 javascript
  • console.log() 显示同一对象属性的矛盾值

    我想我可能要疯了 我使用 console log 来查看对象的状态 然后在下一行对同一对象的特定属性执行 console log 并为每个属性获取不同的值 我正在使用的代码是 console log this pictures Items
  • ToggleClass 动画 jQuery?

    我的网站上有一个部分 当用户单击时我希望它展开 我正在使用 jQuerytoggleClass为了这 expandable function e e preventDefault this closest article toggleCla
  • 如何检测元素内容何时发生变化

    我正在寻找一种方法来监视元素内动态填充 无页面重新加载 内容 以便我可以将类添加到另一个元素 到目前为止我有这个 HTML div class message container div class messages error span
  • 计算文本选择的 xy 位置

    我正在尝试使用 DOM 元素创建自己的文本选择 是的 我的意思是当您在此元素中选择文本时 您会在文本后面看到蓝色背景 这个想法是停止默认行为 蓝色 并使用我自己的元素来完成工作 方法是找到选择的 xy 位置 然后放置绝对定位的元素 我希望能
  • 如何处理requireJs超时错误?

    我正在使用 require js 作为加载框架编写一个移动混合应用程序 我遇到加载错误的问题 我想做的是在设备离线且无法下载在屏幕上显示地图所需的 google 地图 API 脚本时设置后备解决方案 我得到的只是 Uncaught Erro
  • RoR - Rails 中的大文件上传

    我有一个 Rails Web 应用程序 允许用户上传视频 视频存储在 NFS 安装的目录中 当前的设置适用于较小的文件 但我也需要支持大文件上传 最多 4GB 当我尝试上传 4GB 文件时 它最终会发生 但从用户体验的角度来看很糟糕 上传开
  • Node.js - 重载函数

    有没有一种方法可以重载node js中的函数 类似于 noSuchMethod https developer mozilla org en JavaScript Reference Global Objects Object noSuch
  • 如何使用 jQuery 或 JavaScript 聚焦 或 标签?

    for var i 0 i

随机推荐

  • Map和String的相互转化

    Java中的Map集合与String的相互转化 代码如下 package com jianhu Test import java util Arrays import java util HashMap import java util M
  • electron-store 本地储存数据

    elelctron store elelctron store 是很好的本地储存库 https www npmjs com package electron store 使用 npm i elelctron store 设置 electro
  • BurpSuite武器库打造之环境搭建和API介绍(下)

    0x00 前言 接上篇丹丹妹 我又给大家带来了下篇 还是以python为开发语言 如有错误的地方还望大家多指正 轻喷 然后呢这边亲亲建议大家代码这种东西还是要多敲 多踩坑 毕竟伟大的爱情家周树人老先生说过只有痛过才能在心底留下不可磨灭的记号
  • 长草(Python)

    题目描述 小明有一块空地 他将这块空地划分为 n 行 m 列的小块 每行和每列的长度都为 1 小明选了其中的一些小块空地 种上了草 其他小块仍然保持是空地 这些草长得很快 每个月 草都会向外长出一些 如果一个小块种了草 则它将向自己的上 下
  • 【转】山寨一个 Boost.Bind

    原文地址 http www cppblog com Streamlet archive 2012 04 21 172241 html 点击打开链接 一直比较好奇 boost bind 里面占位符和参数的顺序是怎么实现的 也一直看不太懂这方面
  • 2023年最火副业:Python爬虫兼职,一周赚7800元,一天只要两小时 !

    下写了5 6年Python 期间写了各种奇葩爬虫 挣各种奇葩的钱 写这篇文章总结下几种爬虫挣钱的方式 1 最典型的就是找爬虫外包活儿 这是网络爬虫最通常的的挣钱方式 通过外包网站 熟人关系接一个个中小规模的爬虫项目 一般向甲方提供数据抓取
  • 开发者须知,App和小程序须备案,否则面临清退!

    备案并不陌生 前端开发的老铁肯定熟悉 若你的网站未备案情况下 在国内的服务器是无法访问的 所谓备案 通常指的就是ICP备案 需要把你经营的信息 给相关部门进行报备 简而言之 就是网络上的 营业执照 这么做的目的 就是维护网络的安全 防止在网
  • JDK源码阅读之AbstractStringBuilder类

    AbstractStringBuilder类源码阅读 AbstractStringBuilder类的作用 AbstractStringBuilder类的类图 AbstractStringBuilder类的重点方法 属性变量 构造方法 精华方
  • StringUtils常用方法+StringUtils详细介绍

    StringUtils用法 StringUtils详细介绍 博文来源 http yijianfengvip blog 163 com blog static 175273432201212221935832 public static vo
  • anaconda64位环境切换为32位,切换64位和32位python的方法

    今天需要调用一个dll动态函数库 但是本地的python是64位的 dll是32位的 直接调用会报错 OSError WinError 193 1 不是有效的 Win32 应用程序 1 python版本 3 6 anaconda对于pyth
  • Python学习(三)条件运算

    Python学习 三 条件运算 之前讲解了Python中的一些基本语法 今天我们来讲一下Python中的条件运算 一 条件运算符 在Python中我们可以用条件运算符进行最基本的条件判断 基本语法为 语句1 if 条件判断式 else 语句
  • git上传项目到Github(详细版)

    第一步 下载git 官网 Git Downloads 第二步 再需要上传到github的项目右键 打开git的命令行界面 第三步 查看当前分支 所在的分支就是代码上传的地方 git branch 如果需要切换分支 则执行以下语句 切换到主分
  • 浅析java基本数据类型

    java中的基本数据类型4类8种 四种整数类型 byte short int long 两种浮点数类型 float double 一种字符类型 char 一种布尔类型 boolean true 真 和 false 假 所谓数据类型 在数据结
  • 若依免登录进首页

    现象 在启动若依后 输入验证码登录至首页 然后关掉idea中的前后端 再打开idea重启前后端 然后发现若依免登录直接进入到首页 应是login vue中设置了Cookie 如下图所示 这里验证码的答案因为已经缓存到Redis中了 因而在该
  • mpu6050数据,mqtt订阅实时存mysql数据库

    import json import paho mqtt client as mqtt import pymysql import time HOST mqtt域名 PORT mqtt端口号 KEEPALIVE 60 topic MPU60
  • linux系统架构与目录解析

    1 当有两个硬盘都装有linux时 居然可以直接跳进另一个操作系统 不用重启 使用命令chroot 做一些简单的操作 因为linux kernel差不多 2 linux本地启动过程为grub gt kernel gt initrd gt i
  • RIP的防环机制:水平分割、毒性反转、触发更新

    RIP的防环机制 水平分割 毒性反转 触发更新 RIP Routing Information Protocol 路由信息协议 一种距离矢量路由协议 属于IGP协议 适用于中小型网络 使用UDP进行路由信息的交互 端口号520 为了防止产生
  • 计网学习记录,burp抓包等学习记录

    攻防实验室 网安学习记录 1 学习到html的基础架构及其简单用法 1 html基础架构 2 table 定义表格 2 学会用phpstudy创建网站 3 用wordpress对phpstudy创建的网站进行了编辑修改 4 仅通过phpst
  • Android日志分析02-am篇

    Android日志分析02 am篇 在日常分析bug时 免不了和系统ActivityManagerService打交道 根据日志去查看各个Activity的生命周期 从而判断是否出现Activity生命周期异常 先使用adb logcat和
  • for in / for of / forEach 循环

    目录 1 for 循环 2 for in 循环 3 forEach 循环 4 for of循环 5 const 在 for in 或者for of 中的使用 1 for 循环 for 循环的最大缺点是需要跟踪计数器和退出条件 虽然 for