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 = 1;//1、声明循环变量

while (num<=10){//2、判断循环条件;
document.write(num+"<br />");//3、执行循环体操作;
num++;//4、更新循环变量;
}

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

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

2do-while循环

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

var num = 10;

do{
document.write(num+"<br />");//10 9 8 7 6 5 4 3 2 1 0
num--;
}while(num>=0); document.write(num);//-1

3for循环 

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

for (var num =1; num<=10; num++) {
document.write(num+" <br />"); //1 2 3 4 5 6 7 8 9 10
}

4for-in循环 

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

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

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

5for-of循环 

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

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

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

①数组

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方法

②Set 和 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

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

③类似数组的对象

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

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

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

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

6循环控制语句

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

for(var i = 1; i < 10; i++){
     
if(i == 4){
continue;
}
console.log(n);//1 2 3 5 6 7 8 9
} for(var i = 1; i < 10; i++){
if(i == 4){
break;
}
console.log(i);//1 2 3
}
 
for (var [name, value] of es6)

JS循环汇总的更多相关文章

  1. 常见算法是js实现汇总(转载)

    常见算法是js实现汇总 /*去重*/ <script> function delRepeat(arr){ var newArray=new Array(); var len=arr.len ...

  2. Handlebars.js循环中索引(@index)使用技巧(访问父级索引)

    使用Handlebars.js过程中,难免会使用循环,比如构造数据表格.而使用循环,又经常会用到索引,也就是获取当前循环到第几次了,一般会以这个为序号显示在页面上. Handlebars.js中获取循 ...

  3. Data层相关问题 & JS循环取值

    第一次写博客,里面是自己工作中碰到的问题及总结的知识点,便于自己以后回顾,技术大牛们请直接忽略这篇文章,也希望能帮助到想我这样的小白! Data层相关问题总结: 1. 代码管理用的是 VSS 2005 ...

  4. 最新Node.js 资源汇总

    Node.js 资源汇总 文档 Node.js 官方文档:http://nodejs.org/api/ Node.js 中文文档:http://nodejs.jsbin.cn/api/ Express ...

  5. js循环POST提交添加辅助单位

    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/ ...

  6. JS数组+JS循环题

    先看JS循环作业题: 一.一张纸的厚度是0.0001米,将纸对折,对折多少次厚度超过珠峰高度8848米 <script type="text/javascript"> ...

  7. js循环处理后台返回的json数组

    <script type="text/javascript"> function gongdan_search(elm){ var dangqian_value=$(e ...

  8. JS 循环遍历JSON数据 分类: JS技术 JS JQuery 2010-12-01 13:56 43646人阅读 评论(5) 收藏 举报 jsonc JSON数据如:{&quot;options&quot;:&quot;[{

    JS 循环遍历JSON数据 分类: JS技术 JS JQuery2010-12-01 13:56 43646人阅读 评论(5) 收藏 举报 jsonc JSON数据如:{"options&q ...

  9. ----关于统计字符出现次数的JS循环以及indesxOf函数----

    以下将会通过JS循环判断字符“banana”出现次数 以及调用indexOf中的函数来实现统计   <!DOCTYPE html> <html> <body> &l ...

随机推荐

  1. 登陆跳板机每天只输入一次token的方法——ssh clone session

    自从跳板机升级后,无所不在的token让小PE很是恼火,于是有了这篇文章@_@ Linux or Mac篇 在Fedora或者Mac下很简单,修改~/.ssh/config文件,没有的话,就新建一个( ...

  2. UVM中的regmodel建模(二)

    UVM的寄存器模型,对一个寄存器bit中有两种数值,mirror值,尽可能的反映DUT中寄存器的值.expected值,尽可能的反映用户期望的值. 几种常用的操作: read/write:可以前门访问 ...

  3. jQuery 批量操作checkbox

    困扰很久的问题: 如果只是 $('input[type=checkbox]').attr('checked',true);//全选 $('input[type=checkbox]').attr('ch ...

  4. OVS

    基于 OpenvSwitch的OpenFlow实践 Open vSwitch 概述 OpenvSwitch(简称OVS)是由NiciraNetworks主导的,运行在虚拟化平台(例如 KVM,Xen) ...

  5. Linux服务器配置---ftp限制带宽

    限制带宽 ftp服务器可以设置每个用户的带宽,这样根据实际需求来分配,更加充分的利用系统资源.带宽通过参数“anon_max_rate“和”local_max_rate“来设置,这两个参数在配置文件中 ...

  6. python3.4学习笔记(二十) python strip()函数 去空格\n\r\t函数的用法

    python3.4学习笔记(二十) python strip()函数 去空格\n\r\t函数的用法 在Python中字符串处理函数里有三个去空格(包括'\n', '\r', '\t', ' ')的函数 ...

  7. 20145331魏澍琛《网络对抗》Exp4 恶意代码分析

    20145331魏澍琛<网络对抗>Exp4 恶意代码分析 基础问题回答 1.如果在工作中怀疑一台主机上有恶意代码,但只是猜想,所有想监控下系统一天天的到底在干些什么.请设计下你想监控的操作 ...

  8. uboot 网络驱动模型

    原文:https://blog.csdn.net/zhouxinlin2009/article/details/45390065 UBOOT的PHYCHIP配置 PHYCHIP的配置位于 includ ...

  9. VC++ 文件和应用程序关联,默认图标不显示问题

  10. ubuntu下交叉编译imagemagick

    环境:ubuntu16.04 交叉编译器版本号:4.8.3 在编译之前要编译以下其依赖的软件或库:freetype,libpng,libxml2,libtiff,libjpeg,zlib,graphv ...