Fork me on GitHub

循环结构

while循环

语法

while (条件)
{
需要执行的代码
}

案例

1
2
3
4
5
while (i<5)
{
x=x + "The number is " + i + "<br>";
i++;
}

do/while 循环

do/while 循环是 while 循环的变体。该循环会执行一次代码块,在检查条件是否为真之前,然后如果条件为真的话,就会重复这个循环。

语法

do
{
需要执行的代码
}
while (条件);

案例

下面的例子使用 do/while 循环。该循环至少会执行一次,即使条件是 false,隐藏代码块会在条件被测试前执行:

1
2
3
4
5
6
do
{
x=x + "The number is " + i + "<br>";
i++;
}
while (i<5);

break和continue

break 语句跳出循环后,会继续执行该循环之后的代码(如果有的话):

1
2
3
4
5
6
7
for (i = 0; i < 10; i++) {
if (i == 3) {
break;
}
console.log(i)
}
//0 1 2

continue 语句中断循环中的迭代,如果出现了指定的条件,然后继续循环中的下一个迭代。

1
2
3
4
5
for (i = 0; i <= 10; i++) {
if (i == 3) continue;
console.log(i)
}
// 0 1 2 4 5 6 7 8 9 10

for和for in

在遍历数组上的异同

for循环和for in循环都可以遍历获取到数组的内容;

for循环获取数组下标的typeof类型为number;

for in 循环获取数组下标的typeof类型为string;

1
2
3
4
5
6
7
8
9
10
11
var arr = ['a','b','c'];
for(var i = 0;i < arr.length;i++){
console.log(typeof(i));//number
console.log(arr[i]);//a,b,c
}

var att = ['a','b','c'];
for(var j in att){
console.log(typeof(j));//string
console.log(att[j]);//a,b,c
}

在遍历对象上的异同

for循环不能用于循环对象,因为for循环无法获取obj.length,所以for循环只能用于数组操作;
for in 循环可以获取对象的键值,可以操作数组,还可操作对象;

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
var obj = new Object({
name:"Simon",
age:"16",
city:"BJ"
});

console.log(obj.length);//undefined
for(var i = 0;i < obj.length;i++){
console.log(i);//空的
console.log(obj[i]);//空的
}

for(var j in obj){
console.log(j);//name,age,city
console.log(obj[j]);//simon,16,BJ
}

为什么不建议for in 循环数组

如果原生Array类被其他的js脚本库进行了原型扩展,那么用for in遍历扩展后的Array对象的逻辑将与遍历原生Array对象的逻辑发生差异。

1
2
3
4
5
6
7
8
var arr = [1]
Array.prototype.test = function() {

}
console.dir(arr)
for (const key in arr) {
console.log(key) //i test
}