1. for 循环
for 循环,通过 初始条件、结束条件 和 递增条件 来循环执行语句块:
var x = 0;
var i;
for (i=1; i<=10; i++) {
x = x + i;
}
x // 55
var i;
for (i=1; i<=5; i++) {
console.log(i)
}
1
2
3
4
5
for 循环的控制条件说明:
-
i=1
这是 初始条件,将变量i
置为 1; -
i<=10
这是 判断条件,满足时就继续循环,不满足就退出循环; -
i++
这是每次循环后的 递增条件,由于每次循环后变量i
都会加 1,因此它终将在若干次循环后不满足判断条件i<=10
而退出循环。
for 循环最常用的地方是利用索引来遍历数组:
var arr = ['Apple', 'Google', 'Microsoft'];
var i, x;
for (i=0; i<arr.length; i++) {
x = arr[i];
console.log(x);
}
Apple
Google
Microsoft
for 循环的 3 个条件都是可以省略的,如果没有退出循环的判断条件,就必须使用 break
语句退出循环,否则就是死循环:
var x = 0;
for (;;) { // 将无限循环下去
if (x > 100) {
break; // 通过if判断来退出循环
}
x ++;
}
2. for ... in 循环
for 循环的一个变体是 for ... in
循环,它可以把一个对象的所有属性依次循环出来:
var o = {
name: 'Jack',
age: 20,
city: 'Beijing'
};
for (var key in o) {
alert(key); // 'name', 'age', 'city'
}
要过滤掉对象继承的属性,用 hasOwnProperty()
来实现:
var o = {
name: 'Jack',
age: 20,
city: 'Beijing'
};
for (var key in o) {
if (o.hasOwnProperty(key)) {
alert(key); // 'name', 'age', 'city'
}
}
for ... in
循环也可以遍历 Array:
var arr = ['A', 'B', 'C'];
for (var i in arr) {
if (arr.hasOwnProperty(i)) {
alert.log(a[i]); // 'A', 'B', 'C'
}
}
请注意,for ... in
对 Array 的循环得到的是 String
而不是 Number
。
3. while 循环
while
循环只有一个判断条件,条件满足,就不断循环,条件不满足时则退出循环。
var x = 0;
var n = 99;
while (n > 0) { // 如果 n>0 执行,反之不执行
x = x + n;
n = n - 2;
}
x; // 2500
4. do ... while 循环
do { ... } while()
循环 ,它和 while
循环的唯一区别在于,不是在每次循环开始的时候判断条件,而是在每次循环完成的时候判断条件:
var n = 0;
do {
n = n + 1;
} while (n < 100);
n; // 100
用 do { ... } while()
循环要小心,循环体会至少执行1次,而 for
和 while
循环则可能一次都不执行。
5. for ... of 循环
for...of...
语句作用于可迭代对象(包括 Array,Map,Set,String,TypedArray,arguments 对象等等)。
let people = ['tom', 'lily', 'lucy']
for (let item of people) {
console.log(item);
}
tom
lily
lucy