JavaScript中label语句的使用
最近看Javascript高级程序设计,看到一个有趣的问题,label的使用,以此做个笔记。
1. 看一个break和continue的例子
break终止循环;
continue跳出本次循环,继续下次循环。
for(var i = 0; i < 10; i++){ if(i%5==0){ break; } num++; } console.log(num) // 4
for(var i = 0; i < 10; i++){ if(i%5==0){ continue; } num++; } console.log(num) // 8
2. break和continue语句都可以与label联合使用,从而达到代码中特定的位置,这种联合使用的情况多发生在循环嵌套的情况下;
break label;
var num = 0; outermost: for (var i = 0; i < 10; i++) { for (var j = 0; j < 10; j++) { if (i == 5 && j == 5) { break outermost; }else{ console.log(i,j,88); } num++; } } console.log(num); //55
内部循环中break语句带了一个参数,要返回到的标签。添加这个标签的结果将导致break语句不仅会退出内部for循环,而且也会退出外部的for循环,为此当变量i和j都等于5时,num的值正好是55.
continue label;
var num = 0; outermost: for (var i = 0; i < 10; i++) { for (var j = 0; j < 10; j++) { if (i == 5 && j == 5) { continue outermost; }else{ console.log(i,j,88); } num++; } } console.log(num); //95
在这种情况下,continue语句会强制继续执行循环(退出内部循环,执行外部循环)。当变量i和j都等于5时,num的值正好是95.
三个for循环
var itemsId = [1,3]; var all = [[{id:1,name:hehe},{id:3,name:hehe}],[{id:2,name:hehe},{id:4,name:hehe}]]; for(var i=0;i<itemsId.length;i++){ outPoint: for(var j=0;j<all.length;j++){ for(var k=0;k<all[j].length;k++){ if( all[j][k].id == itemsId[i] ){ console.log(all[j][k]); break outPoint; } } } }
这样,在all[j][k].id == itemsId[i]的时候,就会跳出到outPoint的位置,直接跳出两个循环,从下一个id开始查找。少循环了许多次。