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++进入死循环。