break & continue
continue跳出本次循环,继续下面的循环。
break跳出终止循环。
写个简单的例子:
<script>
for (var i=1; i<5; i++){
if (i==3){
continue;
}
console.log(i);
}
</script>
结果就是跳过i等于3的那次循环,而break:
for (var i=1; i<5; i++){
if (i==3){
break;
}
console.log(i);
}
显而易见,i等于3以及后面的循环直接不执行了。
之前我们写的100以内偶数和还记得吧,那个也可以用continue来写:
<script>
var sum = 0;
for (var i=1; i<=100; i++){
if (i%2!=0){
continue;
}
sum+=i;
}
console.log(sum);
</script>
除2余数不等于0的跳过,把不是偶数的都跳过去了,加起来接收一下就好了。
好,continue有用,那break有什么用?这么用——
当你不知道循环执行多少次,可以写个死循环,然后在循环体内判断,满足条件后break终止即可。
那死循环怎么写?
两个方法,没有条件就是死循环,循环条件直接不写,写个分号空着,例:for (var i=1; ; i++)
还有就是这个可以一直满足的条件,比如,i>-1,初始值i=0,i++,自然每次循环就符合条件了。
无穷无尽这就是死循环,到时候就需要在特定的位置bteak终止。
例子还是熟悉的折纸超过珠峰:
对折纸(0.001m)超过珠峰需要多少次?刚超过时高度是多少?
<script>
//纸的厚度
var paper =0.001;
//珠峰高度
var paek =8848;
for (var i=1; ; i++){
paper =paper*2;
if (paper>paek){
console.log('对折了'+i+'次,高度达到了'+paper+'超过了珠峰');
break;
}
}
</script>
练习:模拟计算器
依次输入三个弹窗,第一个输入数字,第二个输入运算符,第三个输入数字,然后给出结果。
非常简单,直接看代码
<script>
//-0是为了给它转为整数类型
var num1 = prompt('请输入第一个数')-0;
var num2 = prompt('请输入运算符+-*/');
var num3 = prompt('请输入第二个数')-0;
var sum=0;//用于接收结果
switch (num2){
case '+':
sum=num1+num3;
alert(sum);
break;//别忘了case击穿
case '-':
sum=num1-num3;
alert(sum);
break;
case '*':
sum=num1*num3;
alert(sum);
break;
case '/':
sum=num1+num3;
alert(sum);
break;
default:
alert('输入内容有误');
break;
}
</script>
它们的区别是运算方式不同,这种重复性高的我们直接用switch case就行。
练习:接收输入的成绩计算平均分
<script>
var score; //每局分数
var avg; //平均分
var sum=0; //总分
for (var i=1; i<5; i++){
score = prompt('请输入第'+i+'局的成绩')
if (isNaN(score)){
i--;//非数字倒退回本次循环开始
continue;
}//isNaN(非数字)执行后面内容,后面细说这个东西
score-=0;//转成数字类型
sum+=score;
avg=sum/i;
}
console.log('平均分:'+avg);
</script>
我们乱输入,直接重新回到本次循环开始
我每次都输入20,测试结果:
练习:找出1-1000以内所有能被5整除,或被6整除的数,并输出。
<script>
for (var i=1; i<=1000; i++){
if (i%5==0 || i%6==0){
console.log(i);
}
}
</script>
或满足一边就行,用ΙΙ对不对,那同时满足用&&,复习一下。
最后一个练习,打印金字塔。
很多写法①可以用横线来写
直接在body中写
<body>
<hr style="width: 10%;">
<hr style="width: 9%;">
<hr style="width: 8%;">
<hr style="width: 7%;">
<hr style="width: 6%;">
<hr style="width: 5%;">
<hr style="width: 4%;">
<hr style="width: 3%;">
<hr style="width: 2%;">
<hr style="width: 1%;">
</body>
太low了,这肯定不是我们的目的,但这也不失为一种方法。
②for循环来写
for (var i=70; i>=10; i-=10){
var str='<hr style="width: '+i+'%;">';
document.write(str);
}
下面再反着来,弄一个对着的
<script>
for (var i=70; i>=10; i-=10){
var str='<hr style="width: '+i+'%;">';
document.write(str);
}
for (var i=10; i<=70; i+=10){
var str='<hr style="width: '+i+'%;">';
document.write(str);
}
</script>
第三种就是直接写了
for (var i=10; i<=70; i+=10){
document.write('<hr style="width: '+i+'%;">');
}
但是,这种写法不好,用变量接收输出的写法是最好的,更好维护。