第九节:JS中的循环语句

2023-11-04

while语句
一般在循环体中来改变判断条件的值,如果不进行值得改变,循环条件一直满足,会造成死循环。

//语法
while (条件) {
    要执行的代码块
}
//例子
while (i < 10) {
    text += "数字是 " + i;
    i++;
}

do…while 循环是 while 循环的变体,能用do…while的都能用while替代

//语法:
do {
    要执行的代码块
}
while (条件);
//实例
do {
    text += "<br>数字为 " + i;
    i++;
} while (i < 5);

for循环

//语法,第一个表达式为初始化,第二个表达式为判断,第三个表达式为更新,
for (语句 1; 语句 2; 语句 3) {
     要执行的代码块
}
//执行过程:语句1,语句2,代码块,语句3;语句1初始化只执行1次,之后执行顺序为语句2,代码块,语句3
//例子
for (i = 0; i < 5; i++) {
     text += "数字是 " + i + "<br>";
}

for循环的初始化可以写到外面,这样跟while的运行基本一致;
for循环与while循环虽然语法不同,但是执行效率是相同的
一般数组会用到循环语句

for in循环
for in循环是一个更精准的迭代,相比上面两个循环效率低,用于遍历 对象,把对象的所有属性列举(枚举)出来(枚举对象的所有属性)

//语法
for (key in object) {
  // code block to be executed
}
//遍历对象
const person = {fname:"Bill", lname:"Gates", age:19}; 
let txt = "";
for (let x in person) {
  txt += person[x] + " ";
}  
console.log(txt);//结果:Bill Gates 19
//遍历数组
const numbers = [45, 4, 9, 16, 25];
let txt = "";
for (let x in numbers) {
  txt += numbers[x];
}
console.log(txt);//45-4-9-16-25-

运行规则:

  • 先执行in后面的表达式,如果是对象直接执行下一步,如果不是对象则转化为对象,null和undefined报错或跳过
  • 把对象的一个属性取出来,然后赋值给定义in前面定义的表达式,赋值完成执行循环体,循环体完了再执行赋值,然后循环体,直到所有属性都列举完成

注意要点:

  • in前面的表达式可以是任意值,但一般为左值(即可赋值的值),一般为变量;或者是对象的一个属性
  • 和for循环不同的是,in前面的表达式每次都会被执行;for的第一个表达式只在初始化时执行一次
  • in后面的表达式也可以是数字、字符串或者布尔;如果是数字或者布尔不会进行任何操作,因为数字和布尔转换为对象是没有任何属性可被列举的;
  • 枚举是没有顺序的,但一般浏览器都是按照定义顺序进行枚举的
  • 如果是带有数字属性的,如数组字符串,会按照从0开始枚举的(但不建议使用for in,因为for in更精准所以性能较低),建议使用for或者数组forEach方法Array.forEach()

//字符串
var str = 'abcd';
var tt='';
for(let i in str){
tt += str[i];
};
console.log(tt);// 结果:abcd  new String('abcd')有可枚举属性
//数字
var str = 1234;
var tt='';
for(let i in str){
tt += str[i];
};
console.log(tt); //结果:空  new Number(1234)无可枚举属性
//布尔
var str = true;
var tt='';
for(let i in str){
tt += str[i];
};
console.log(tt); //结果:空 new Boolean(true)无可枚举属性
//特殊用法
const a=[];
let i=0;
const person = {fname:"Bill", lname:"Gates", age:19}; 
for(a[i++] in person); //将对象的属性依次放到数组中
console.log(a); // ['fname', 'lname', 'age'] 

数字、字符串、布尔的基本包装类型:new Boolean() 、new Number() 和new String()

备注:本内容学习总结来源于喜马拉雅冰山工作室沙翼老师主讲的(陪你读书(JavaScript WEB前端))

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

第九节:JS中的循环语句 的相关文章

随机推荐

  • QT环境搭建:解决Linux系统下QT(qDebug和console)无输出

    在Linux下调试时突然发现无论怎样qDebuge无法输出了 寻找了半天 发现是环境变量出了问题 我的环境是统信的UOS 解决办法就是修改QT LOGGING RULES变量 1 查看是否是这个变量的问题 export p grep QT
  • linux各种版本下载地址

    http blog chinaunix net uid 26760055 id 3138203 html 首先提供两个镜像站 http mirrors sohu com http mirrors 163 com Red Hat Enterp
  • linux ubuntu18.04安装(更新)cmake版本 (坑是真滴多,我都给你趟过去了)

    笔者就是想学一手网络编程 通过本地clion编写代码 在云服务器上跑起来 这就涉及到了cmake版本问题 本地编译器cmake版本为3 22 3 云服务器的版本过于低了 用这个语句装的版本为3 10 好多人都不建议用这个装 但是这个不装的话
  • 简单的整理一下VIM环境配置和插件安装

    http www zhaiqianfeng com 2017 02 install vim plugins html 先占个坑 周末有时间再写
  • Java Stream流

    目录 1 Stream 流的获取方法 2 Stream 流的常见中间方法 3 Stream 流的常见终结方法 4 Stream 流的收集方法 获取 Stream 流 创建一条流水线 并把数据放到流水线上准备进行操作 中间方法 流水线上的操作
  • nginx篇10-限速三剑客之limit_req

    本文主要是对nginx官方limit req相关模块的限速原理的解释和一些个人理解 主要参考的文章为Rate Limiting with NGINX and NGINX Plus和nginx的ngx http limit req modul
  • C++编码规范(1):代码注释

    当你阅读别人的代码时如果没有注释那会是件比较痛苦的事 一说到注释我们马上想到是通过 或 这样来添加一些描述信息 这只是狭义的注释 广义的注释我们可以理解为 任何有助于理解代码的信息都可以看成注释 我们可以把写代码和写文章类比下 自然语言会有
  • Qt - 获取屏幕分辨率

    欢迎转载 请注明出处 https blog csdn net qq 39453936 spm 1010 2135 3001 5343 原文链接 https blog csdn net qq 39453936 article details
  • MySQL必知必会——第十七章组合查询

    组合查询 本章讲述如何利用UNION操作符将多条SELECT语句组合成一个结果集 组合查询 多数SQL查询都只包含从一个或多个表中返回数据的单条SELECT语句 MySQL也允许执行多个查询 并将结果作为单个查询结果返回 这些组合查询通常称
  • chatgpt提问句式整理

    你不知道 GPT知道 1 元问题 我想了解xxxx 我应该向你问哪些问题 2 请给我列出xxx领域 行业相关的 最常用的50个概念 并做简单解释 如果有英文缩写 请给出完整的英文解释 3 请详细介绍一下elon musk的主要生平事迹 请详
  • 设计模式:再谈单例模式

    单例模式可以说是每个人问设计模式都会脱口而出的几个设计模式之一 为什么之前写过一次了 现在我又写一遍 肯定不是重新写一遍怎么是设计模式 这次写的单例模式主要围绕的关键词有 延迟加载 高并发 线程安全 为什么说用枚举的单例模式优雅且怎么做到的
  • 服务器出现漏洞如何处理

    1 从基本做起 及时安装系统补丁 不管是什么操作系统 都是在更新中不断完善 都存在着漏洞 这些漏洞就是电脑被入侵的最 好通道 所以及时打补丁更新系统 防止被攻击利用 是服务器最重要的安全保证之一 2 安装杀毒软件 现在网络上的病毒非常猖獗
  • ConcurrentHashMap中有十个提升性能的细节,你都知道吗?

    历史文章推荐 HashMap面试 看这一篇就够了 七种方式教你在SpringBoot初始化时搞点事情 Java序列化的这三个坑千万要小心 Java中七个潜在的内存泄露风险 你知道几个 JDK 16新特性一览 啥 用了并行流还更慢了 Inno
  • layui上传文件php上传接口异常,layui.upload上传图片报错“请求上传接口出现异常”...

    layui upload上传图片报错 请求上传接口出现异常 且接口报404问题 在调试layui upload上传图片时候报错 请求上传接口出现异常 且接口返回是404 返回接口丢失了 复盘处理流程 花了一些事件 做了如下的一些问题筛选处理
  • 企业信息化快速开发平台 JeeSite

    JeeSite是基于多个优秀的开源项目 高度整合封装而成的高效 高性能 强安全性的 开源 Java EE快速开发平台 JeeSite本身是以Spring Framework为核心容器 Spring MVC为模型视图控制器 MyBatis为数
  • 特征选择过滤器 - mutual_info_regression(连续目标变量的互信息)

    文章目录 函数 参数说明 函数 sklearn feature selection mutual info regression X y discrete features auto n neighbors 3 copy True rand
  • AD17 PCB板框无法设置

    could not find board outline using primitives centerline due to the following error at least 2 connected tracks arcs or
  • Python实现定时执行脚本(1)

    前言 本文是该专栏的第11篇 后面会持续分享python的各种干货知识 值得关注 很多时候 我们需要对工作上的python脚本附加一个定时执行的功能 让脚本自动在某个时间段开始执行 当接到这样的需求时 你脑海中想到的会不会是Time模块 的
  • 关于GD32调试JLINK连接不上的问题

    最近有一个项目要用到GD32E230 然后经过了绘画原理图 PCB布线 焊接元件 再到最后一步的调试 发现用JLINK的SWD模式无论怎么也连不上 在和同事纠结了两天之后 发现了原来是PCB里面IC的封装画错了 以下把GD32和STM32官
  • 第九节:JS中的循环语句

    while语句 一般在循环体中来改变判断条件的值 如果不进行值得改变 循环条件一直满足 会造成死循环 语法 while 条件 要执行的代码块 例子 while i lt 10 text 数字是 i i do while 循环是 while