热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

JS循环汇总

JS循环汇总一、总结一句话总结:js中的循环主要有while、for、forin、forof,循环是,要区别不同的循环对象&#

JS循环汇总

一、总结

一句话总结:js中的循环主要有while、for、for...in、for...of,循环是,要区别不同的循环对象,比如对象,数组,集合等

while for for...in for...of
循环对象

 

1、for...of循环是干嘛的?

键值

Javascript 原有的for...in循环,只能获得对象的键名,不能直接获取键值。ES6 提供for...of循环,允许遍历获得键值。

var arr = ['a', 'b', 'c', 'd'];for (let a in arr) {console.log(a); // 0 1 2 3 } for (let a of arr) { console.log(a); // a b c d }

 

 上面代码表明,for...in循环读取键名,for...of循环读取键值。如果要通过for...of循环,获取数组的索引,可以借助数组实例的entries方法和keys方法

 

2、for...in循环和for...of循环对应的优缺点?

for in 对象 键名
for of 值

for...in循环有几个缺点
  ①数组的键名是数字,但是for...in循环是以字符串作为键名“0”、“1”、“2”等等。
  ②for...in循环不仅遍历数字键名,还会遍历手动添加的其他键,甚至包括原型链上的键。
  ③某些情况下,for...in循环会以任意顺序遍历键名。
  for...in循环主要是为遍历对象而设计的,不适用于遍历数组。

for...of循环
  有着同for...in一样的简洁语法,但是没有for...in那些缺点。
  不同于forEach方法,它可以与break、continue和return配合使用。
  提供了遍历所有数据结构的统一操作接口。

 

3、js中如何创建集合set和映射map?

new set()
new Map()

var engines = new Set(["Gecko", "Trident", "Webkit", "Webkit"]);for (var e of engines) { console.log(e); } // Gecko Trident Webkit var es6 = new Map(); es6.set("edition", 6); es6.set("committee", "TC39"); es6.set("standard", "ECMA-262"); for (var [name, value] of es6) { console.log(name + ": " + value); } // edition: 6 // committee: TC39 // standard: ECMA-262

 

4、for...of循环中如何得到键值?

for (var [name, value] of es6)

var engines = new Set(["Gecko", "Trident", "Webkit", "Webkit"]);for (var e of engines) { console.log(e); } // Gecko Trident Webkit var es6 = new Map(); es6.set("edition", 6); es6.set("committee", "TC39"); es6.set("standard", "ECMA-262"); for (var [name, value] of es6) { console.log(name + ": " + value); } // edition: 6 // committee: TC39 // standard: ECMA-262

 

5、for...of适用的场景有哪些?

Symbol.iterator

  ES6 借鉴 C++、Java、C# 和 Python 语言,引入了for...of循环,作为遍历所有数据结构的统一的方法。

  一个数据结构只要部署了Symbol.iterator属性,就被视为具有iterator接口,就可以用for...of循环遍历它的成员。也就是说,for...of循环内部调用的是数据结构的Symbol.iterator方法。
  for...of循环可以使用的范围包括数组、Set 和 Map 结构、某些类似数组的对象(比如arguments对象、DOM NodeList 对象)、后文的 Generator 对象,以及字符串。

 

 

二、JS中的循环---最全的循环总结

参考:JS中的循环---最全的循环总结 - baiyunke - 博客园
https://www.cnblogs.com/baiyunke/p/7821299.html

 在讲循环的之前,先知道一下循环结构的执行步骤 

  1、声明循环变量;
  2、判断循环条件;
  3、执行循环体操作;
  4、更新循环变量;
  5、然后循环执行2-4,直到条件不成立,跳出循环。

 

 

1while循环

var num &#61; 1;//1、声明循环变量while (num<&#61;10){//2、判断循环条件;document.write(num&#43;"
");//3、执行循环体操作&#xff1b;num&#43;&#43;;//4、更新循环变量&#xff1b;
}

  while循环()中的表达式&#xff0c;运算结果可以是各种类型&#xff0c;但是最终都会转为真假&#xff0c;转换规则如下。

  ①Boolean&#xff1a;true为真&#xff0c;false为假&#xff1b;
  ②String&#xff1a;空字符串为假&#xff0c;所有非空字符串为真&#xff1b;
  ③Number&#xff1a;0为假&#xff0c;一切非0数字为真&#xff1b;
  ④null/Undefined/NaN:全为假&#xff1b;
  ⑤Object&#xff1a;全为真。

 

2do-while循环

  while循环特点&#xff1a;先判断后执行&#xff1b;
  do-while循环特点&#xff1a;先执行再判断&#xff0c;即使初始条件不成立&#xff0c;do-while循环至少执行一次&#xff1b;

 

var num &#61; 10;do{document.write(num&#43;"
");//10 9 8 7 6 5 4 3 2 1 0num--;}while(num>&#61;0);document.write(num);//-1

 

3for循环 

 for循环
  1、for有三个表达式&#xff1a;①声明循环变量&#xff1b;②判断循环条件&#xff1b;③更新循环变量&#xff1b;
    三个表达式之间&#xff0c;用;分割&#xff0c;for循环三个表达式都可以省略&#xff0c;但是两个“;”缺一不可。
  2、for循环的执行特点&#xff1a;先判断再执行&#xff0c;与while相同
  3、for循环三个表达式都可以有多部分组成&#xff0c;第二部分多个判断条件用&& ||连接&#xff0c;第一三部分用逗号分割&#xff1b;

for (var num &#61;1; num<&#61;10; num&#43;&#43;) {document.write(num&#43;"
"); //1 2 3 4 5 6 7 8 9 10
}

 

4for-in循环 

 for-in 循环主要用于遍历对象
  for()中的格式&#xff1a;for(keys in zhangsan){}
  keys表示obj对象的每一个键值对的键&#xff01;&#xff01;所有循环中&#xff0c;需要使用obj[keys]来取到每一个值&#xff01;&#xff01;&#xff01;

  for-in 循环&#xff0c;遍历时不仅能读取对象自身上面的成员属性&#xff0c;也能延续原型链遍历出对象的原型属性
  所以&#xff0c;可以使用hasOwnProperty判断一个属性是不是对象自身上的属性。
  obj.hasOwnProperty(keys)&#61;&#61;true 表示这个属性是对象的成员属性&#xff0c;而不是原先属性

//声明一个Peson类
function Person(){this.name &#61; "张三";this.age &#61; 14;this.func1 &#61; function(){}
}
//实例化这个类
var zhangsan &#61; new Person();
//使用for-in遍历这个对象
for(keys in zhangsan){console.log(zhangsan[keys])
}

 

 

 

5for-of循环 

  ES6 借鉴 C&#43;&#43;、Java、C# 和 Python 语言&#xff0c;引入了for...of循环&#xff0c;作为遍历所有数据结构的统一的方法。

  一个数据结构只要部署了Symbol.iterator属性&#xff0c;就被视为具有iterator接口&#xff0c;就可以用for...of循环遍历它的成员。也就是说&#xff0c;for...of循环内部调用的是数据结构的Symbol.iterator方法。
  for...of循环可以使用的范围包括数组、Set 和 Map 结构、某些类似数组的对象&#xff08;比如arguments对象、DOM NodeList 对象&#xff09;、后文的 Generator 对象&#xff0c;以及字符串。

 

 下面是一些数据结构的遍历

①数组

 Javascript 原有的for...in循环&#xff0c;只能获得对象的键名&#xff0c;不能直接获取键值。ES6 提供for...of循环&#xff0c;允许遍历获得键值。

 

var arr &#61; [&#39;a&#39;, &#39;b&#39;, &#39;c&#39;, &#39;d&#39;];for (let a in arr) {console.log(a); // 0 1 2 3
}for (let a of arr) {console.log(a); // a b c d}

 

 上面代码表明&#xff0c;for...in循环读取键名&#xff0c;for...of循环读取键值。如果要通过for...of循环&#xff0c;获取数组的索引&#xff0c;可以借助数组实例的entries方法和keys方法

 

②Set 和 Map 结构

var engines &#61; new Set(["Gecko", "Trident", "Webkit", "Webkit"]);for (var e of engines) {console.log(e);}// Gecko Trident Webkitvar es6 &#61; new Map();es6.set("edition", 6);es6.set("committee", "TC39");es6.set("standard", "ECMA-262");for (var [name, value] of es6) {console.log(name &#43; ": " &#43; value);}// edition: 6// committee: TC39// standard: ECMA-262

 

 上面代码演示了如何遍历 Set 结构和 Map 结构。值得注意的地方有两个&#xff0c;首先&#xff0c;遍历的顺序是按照各个成员被添加进数据结构的顺序。其次&#xff0c;Set 结构遍历时&#xff0c;返回的是一个值&#xff0c;而 Map 结构遍历时&#xff0c;返回的是一个数组&#xff0c;该数组的两个成员分别为当前 Map 成员的键名和键值。

 

③类似数组的对象

 类似数组的对象包括好几类。下面是for...of循环用于字符串、DOM NodeList 对象、arguments对象的例子。

// 字符串var str &#61; "hello";for (let s of str) {console.log(s); // h e l l o
}// DOM NodeList对象let paras &#61; document.querySelectorAll("p");for (let p of paras) {p.classList.add("test");}// arguments对象function printArgs() {for (let x of arguments) {console.log(x);}}printArgs(&#39;a&#39;, &#39;b&#39;);// &#39;a&#39; &#39;b&#39;

 

  与其他遍历语法的比较
for...in循环有几个缺点
  ①数组的键名是数字&#xff0c;但是for...in循环是以字符串作为键名“0”、“1”、“2”等等。
  ②for...in循环不仅遍历数字键名&#xff0c;还会遍历手动添加的其他键&#xff0c;甚至包括原型链上的键。
  ③某些情况下&#xff0c;for...in循环会以任意顺序遍历键名。
  for...in循环主要是为遍历对象而设计的&#xff0c;不适用于遍历数组。

for...of循环
  有着同for...in一样的简洁语法&#xff0c;但是没有for...in那些缺点。
  不同于forEach方法&#xff0c;它可以与break、continue和return配合使用。
  提供了遍历所有数据结构的统一操作接口。

 

6循环控制语句

  1、break&#xff1a;跳出本层循环&#xff0c;继续执行循环后面的语句。
    如果循环有多层&#xff0c;则break只能跳出一层。
  2、continue&#xff1a;跳过本次循环剩余的代码&#xff0c;继续执行下一次循环。
    ①对与for循环&#xff0c;continue之后执行的语句&#xff0c;是循环变量更新语句i&#43;&#43;&#xff1b;
    ②对于while、do-while循环&#xff0c;continue之后执行的语句&#xff0c;是循环条件判断&#xff1b;
    因此&#xff0c;使用这两个循环时&#xff0c;必须将continue放到i&#43;&#43;之后使用&#xff0c;否则&#xff0c;continue将跳过i&#43;&#43;进入死循环。

 

for(var i &#61; 1; i <10; i&#43;&#43;){if(i &#61;&#61; 4){continue;}console.log(n);//1 2 3 5 6 7 8 9
}for(var i &#61; 1; i <10; i&#43;&#43;){if(i &#61;&#61; 4){break;}console.log(i);//1 2 3}

 

for (var [name, value] of es6)

转:https://www.cnblogs.com/Renyi-Fan/p/10217221.html



推荐阅读
  • 本文总结和分析了JDK核心源码(2)中lang包下的基础知识,包括常用的对象类型包和异常类型包。在对象类型包中,介绍了Object类、String类、StringBuilder类、StringBuffer类和基本元素的包装类。在异常类型包中,介绍了Throwable类、Error类型和Exception类型。这些基础知识对于理解和使用JDK核心源码具有重要意义。 ... [详细]
  • 目录实现效果:实现环境实现方法一:基本思路主要代码JavaScript代码总结方法二主要代码总结方法三基本思路主要代码JavaScriptHTML总结实 ... [详细]
  • 如何使用Java获取服务器硬件信息和磁盘负载率
    本文介绍了使用Java编程语言获取服务器硬件信息和磁盘负载率的方法。首先在远程服务器上搭建一个支持服务端语言的HTTP服务,并获取服务器的磁盘信息,并将结果输出。然后在本地使用JS编写一个AJAX脚本,远程请求服务端的程序,得到结果并展示给用户。其中还介绍了如何提取硬盘序列号的方法。 ... [详细]
  • 本文介绍了OC学习笔记中的@property和@synthesize,包括属性的定义和合成的使用方法。通过示例代码详细讲解了@property和@synthesize的作用和用法。 ... [详细]
  • VueCLI多页分目录打包的步骤记录
    本文介绍了使用VueCLI进行多页分目录打包的步骤,包括页面目录结构、安装依赖、获取Vue CLI需要的多页对象等内容。同时还提供了自定义不同模块页面标题的方法。 ... [详细]
  • 本文介绍了闭包的定义和运转机制,重点解释了闭包如何能够接触外部函数的作用域中的变量。通过词法作用域的查找规则,闭包可以访问外部函数的作用域。同时还提到了闭包的作用和影响。 ... [详细]
  • 本文介绍了lua语言中闭包的特性及其在模式匹配、日期处理、编译和模块化等方面的应用。lua中的闭包是严格遵循词法定界的第一类值,函数可以作为变量自由传递,也可以作为参数传递给其他函数。这些特性使得lua语言具有极大的灵活性,为程序开发带来了便利。 ... [详细]
  • Java序列化对象传给PHP的方法及原理解析
    本文介绍了Java序列化对象传给PHP的方法及原理,包括Java对象传递的方式、序列化的方式、PHP中的序列化用法介绍、Java是否能反序列化PHP的数据、Java序列化的原理以及解决Java序列化中的问题。同时还解释了序列化的概念和作用,以及代码执行序列化所需要的权限。最后指出,序列化会将对象实例的所有字段都进行序列化,使得数据能够被表示为实例的序列化数据,但只有能够解释该格式的代码才能够确定数据的内容。 ... [详细]
  • 开发笔记:加密&json&StringIO模块&BytesIO模块
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了加密&json&StringIO模块&BytesIO模块相关的知识,希望对你有一定的参考价值。一、加密加密 ... [详细]
  • javascript  – 概述在Firefox上无法正常工作
    我试图提出一些自定义大纲,以达到一些Web可访问性建议.但我不能用Firefox制作.这就是它在Chrome上的外观:而那个图标实际上是一个锚点.在Firefox上,它只概述了整个 ... [详细]
  • 本文讨论了一个关于cuowu类的问题,作者在使用cuowu类时遇到了错误提示和使用AdjustmentListener的问题。文章提供了16个解决方案,并给出了两个可能导致错误的原因。 ... [详细]
  • Voicewo在线语音识别转换jQuery插件的特点和示例
    本文介绍了一款名为Voicewo的在线语音识别转换jQuery插件,该插件具有快速、架构、风格、扩展和兼容等特点,适合在互联网应用中使用。同时还提供了一个快速示例供开发人员参考。 ... [详细]
  • Html5-Canvas实现简易的抽奖转盘效果
    本文介绍了如何使用Html5和Canvas标签来实现简易的抽奖转盘效果,同时使用了jQueryRotate.js旋转插件。文章中给出了主要的html和css代码,并展示了实现的基本效果。 ... [详细]
  • Todayatworksomeonetriedtoconvincemethat:今天在工作中有人试图说服我:{$obj->getTableInfo()}isfine ... [详细]
  • 不同优化算法的比较分析及实验验证
    本文介绍了神经网络优化中常用的优化方法,包括学习率调整和梯度估计修正,并通过实验验证了不同优化算法的效果。实验结果表明,Adam算法在综合考虑学习率调整和梯度估计修正方面表现较好。该研究对于优化神经网络的训练过程具有指导意义。 ... [详细]
author-avatar
ACE纞_814
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有