JavaScript循环与迭代补充

166 阅读3分钟
常用循环与迭代语句:
for 语句
do...while 语句
while 语句
labeled 语句
break 语句
continue 语句
for...in 语句
for...of 语句

do...while语句

//先执行do后判断while
var i = 5;
do {
  i += 1;
  console.log(i);
} while (i < 5); 
//console.log 6; 

label语句

label 语句的语法看起来像这样:

label :
   statement
label 的值可以是任何的非保留字的 JavaScript 标识符, statement 可以是任意你想要标识的语句(块)。

**break label 等价于 return
continue label 等价于 break**

eg:
未添加 Labelvar num = 0;
for (var i = 0 ; i < 10 ; i++) {   // i 循环
  for (var j = 0 ; j < 10 ; j++) { // j 循环
    if( i == 5 && j == 5 ) {
       break; // i = 5,j = 5 时,会跳出 j的for循环 但是没有跳出i的for循环,从i=6往后还是会继续执行下去的,如果不往下,需要使用return。
    } 
  num++;
  }
}

alert(num); // 输出 95
添加 Label 后:

var num = 0;
outPoint:
for (var i = 0 ; i < 10 ; i++){
  for (var j = 0 ; j < 10 ; j++){
    if( i == 5 && j == 5 ){
      break outPoint; // 在 i = 5,j = 5 时,跳出所有循环,
                      // 返回到整个 outPoint 下方,继续执行
    }
    num++;
  }
}

alert(num); // 输出 55
使用 continue 语句,则可达到与未添加 label 相同的效果,但在这种有多层循环的情况下,循环的跳出进入流程更为明晰一些:

var num = 0;
outPoint:
for(var i = 0; i < 10; i++) {
  for(var j = 0; j < 10; j++) {
    if(i == 5 && j == 5) {
      continue outPoint;
    }
    num++;
  }
}
alert(num);  // 95

for...in和for...of语句

for...in 获得的是对象的属性(key)或者数组的下标(数组不推荐使用,数组推荐使用for...of或者forEach)
for...of 语句在可迭代对象(包括ArrayMapSetarguments 等等)不能在object上使用,获得是对象的元素(value)

//下面的这个例子展示了 for...of 和 for...in 两种循环语句之间的区别。 
//for...in 循环遍历的结果是数组元素的下标,而 for...of 遍历的结果是元素的值 
//数组
let a = [1, 2, 3];
for (let i in a) {
  console.log("in", i); //输出 0 1 2 下标 不推荐对数组使用
}
for (let k of a) {
  console.log("of", k); //输出 1 2 3 
}

//Object in输出key
let b1 = { num: 4 };
for (let i in b1) {
  console.log("in", i); //输出 in num 如果b1是map对象 输出为空
}

//Map  of输出value
let b2 = new Map();
b2.set("num", 5);
for (let k of b2) {
  console.log("of", k); //输出 of [ 'num', 5 ],如果b2={num:5}不是可迭代对象,报错
}

//虽然使用 for...in 来迭代数组 Array 元素听起来很诱人,但是它返回的东西除了数字索引外,还有可能是你自定义的属性名字。因此还是用带有数字索引的传统的 for 循环来迭代一个数组比较好,因为,如果你想改变数组对象,比如添加属性或者方法,for...in 语句迭代的是自定义的属性,而不是数组的元素。(for...of 语句,和 forEach(),也是理想的选择。)