JS循环

# 循环 > 内容来源:[菜鸟JavaScript教程](https://www.runoob.com/js/js-tutorial.html) 拓展阅读:[JavaScript的15种循环遍历,你掌握了几种?](https://blog.csdn.net/qq_41899174/article/details/82797089) - for - 循环代码块一定的次数 - for/in - 循环遍历对象的属性 - while - 当指定的条件为 true 时循环指定的代码块 - do/while - 同样当指定的条件为 true 时循环指定的代码块 ## For 循环 将代码块执行指定的次数 特点:先判断再执行,与while相同 ```js for (语句 1; 语句 2; 语句 3) { 被执行的代码块 } ``` 语句 1 (代码块)开始前执行 语句 2 定义运行循环(代码块)的条件 语句 3 在循环(代码块)已被执行之后执行 ```js for (var i=0; i<5; i++) { logd(i); } ``` 从上面的例子中,您可以看到: Statement 1 在循环开始之前设置变量 (var i=0)。 Statement 2 定义循环运行的条件(i 必须小于 5)。 Statement 3 在每次代码块已被执行后增加一个值 (i++)。 ## For/In 循环 遍历对象的属性 For/In语句用于对数组或者对象的属性进行循环操作。 For/In循环中的代码每执行一次,就会对数组或者对象的属性进行一次操作。 ```js var person={fname:"Bill",lname:"Gates",age:56}; for (x in person) // x 为属性名 { logd(person[x]); } ``` ## For/Of 循环 可以使用的范围包括数组、Set 和 Map 结构、某些类似数组的对象(比如arguments对象、DOM NodeList 对象)、Generator 对象,以及字符串。 JavaScript 原有的for-in循环,只能获得对象的键名,不能直接获取键值。ES6 提供for...of循环,允许遍历获得键值 > EasyClick是基于ES5的,支持部分ES6的语法 ```js //数组操作 var arr = ['a', 'b', 'c', 'd']; for (let a in arr) { logd(a); // 0 1 2 3 } for (let a of arr) { logd(a); // a b c d } ``` ## while 循环 只要指定条件为 true,循环就可以一直执行代码块 特点:先判断后执行 ```js while (条件) { 需要执行的代码 } ``` while循环()中的表达式,运算结果可以是各种类型,但是最终都会转为真假,转换规则如下。 - Boolean:true为真,false为假; - String:空字符串为假,所有非空字符串为真; - Number:0为假,一切非0数字为真; - null/Undefined/NaN:全为假; - Object:全为真。 ```js while (i<5) { logd("The number is " + i ); i++; } ``` >i 如果您忘记增加条件中所用变量的值,该循环永远不会结束。这可能导致程序进入死循环 ## do/while 循环 do/while 循环是 while 循环的变体。 该循环会在检查条件是否为真之前执行一次代码块,然后如果条件为真的话,就会重复这个循环。 特点:先执行再判断,即使初始条件不成立,do-while循环至少执行一次,也就是说do-while循环比while循环多执行一次。 ```js do { 需要执行的代码 } while (条件); ``` 下面的例子使用 do/while 循环。该循环至少会执行一次,即使条件为 false 它也会执行一次,因为代码块会在条件被测试前执行: ```js do { x=x + "The number is " + i + "<br>"; i++; } while (i<5); ``` >i 别忘记增加条件中所用变量的值,否则循环永远不会结束! ## break 和 continue break 语句用于跳出循环。 break 语句跳出循环后,会继续执行该循环之后的代码(如果有的话): ```js for (i=0;i<10;i++) { if (i==3) { break; } logd("The number is " + i); } ``` continue 用于跳过循环中的一个迭代。 如果出现了指定的条件,然后继续循环中的下一个迭代。 ```js for (i=0;i<=10;i++) { if (i==3) continue; x=x + "The number is " + i + "<br>"; } ``` >d 对于while、do-while循环,continue之后执行的语句,是循环条件判断; 因此,使用这两个循环时,必须将continue放到 i++ 之后使用,否则continue将跳过 i++进入死循环。