条件语句和循环语句
条件判断语句
代码块:同一个{}中的语句我们称为是一组语句,也叫代码块
- 只具备分组的作用,没有其他的用途,在外部是完全可见的
- 让结构更加的清晰
语法:
-
if(条件表达式){} // 先对条件表达式进行求值判断 if(true) alert('hello'); // 执行弹框 // if语句只能控制后面的那一条语句 // 使用代码块,if就可以控制多条语句 if(true){ alert('hello'); alert('world'); } //当改语句执行时,会从上到下依次对条件表达式的值进行判断 // 如果为true则执行该条语句 var age = 18; if(age >= 18){ alert('成年人'); }else{ alert('未成年人'); } prompt() // 可以弹出一个提示框,用户可以进行输入,和python的input类似 var age = prompt("请输入你的年龄"); alert(age); if(age >= 18){ alert('成年人'); }else{ alert('未成年人'); } var age = + prompt("请输入你的年龄"); //返回值就是一个number
条件分支语句
- switch语句
- switch。。case。。。 回依次将case后的表达式的值和switch的条件表达式的值进行全等比较,如果比较为true,则从当前 case 执行代码。
- 条件比较清楚
- 语法
switch(条件表达式){
case 表达式:
break
}
var num = 10;
switch(num){
case 1:
console.log('hello');
case 2:
console.log('world');
case 10:
console.log("that's right");
break; // 退出switch语句
default: // 相当于else
console.log('not found')
}
循环语句
-
通过循环语句可以反复执行一段代码多次
-
while循环
先对条件表达式进行求值,再去判断
while(条件表达式){
语句
}
var n = 0;
while(true){
alert(n++);
if(n == 20){
break;
}
}
var n = 0;
while(n < 20){
//定义一个更新表达式
alert('hello'+n)
n++;
}
- do。。。while循环
- 循环体执行完毕以后,在对while之后的条件表达式进行判断
- 如果为true继续执行,false则终结
- 可以保证循环体至少执行一次,而while不能
do{
语句
}while(条件表达式)
var n = 0;
do{
alert(n++);
}while(n<=10);
-
for循环
-
for循环语法 for(初始化表达式;条件表达式;更新表达式){ 语句 } for(var i = 0; i < 10 ;i++){ document.write(i) } 执行的流程: 1.执行初始化表达式,初始化变量 2.执行条件表达式,判断是否执行循环,为true则执行循环 3.执行更新表达式,更新完表达式执行完毕继续重复 三个部分都以在外部写 var i = 0 ; for (;i<10){ alert(i++) } for (;;){ alert('hello') } // 死循环 打印水仙花数 for(var i=100; i<1000;i++){ bai = parseInt(i / 100); shi = parseInt(i/10%10); ge = i % 10; if(bai**3+shi**3+ge**3 == i){ document.write(i+'\t'); } } 153 370 371 407 判断输入的数字是否为质数 var num = prompt("输入你要验证的数字:") //后面不加分号 var flag = true; for(var i = 2; i<num;i++){ if(num % i == 0){ flag = false; } } if(flag){ alert(num+"是质数"); }else{ alert(num+"不是质数"); }
-
嵌套的for循环
-
打印三角* for(var i=0;i<100;i++){ for(var j =0;j <=i+1;j++;){ document.write('* '); } //换行 document.write('<br />'); } 打印倒三角* //控制*的高度 for(var i=0;i<100;i++){ //控制*的宽度 for(var j =0;j <=100-i;j++;){ document.write('* '); } //换行 document.write('<br />'); } 正乘法表 for(var i=1;i<10;i++){ for(var j=1;j<i+1;j++){ document.write(j+'*'+i+'='+(i*j)+'\t'); } document.write('<br />'); } 打印一个倒乘法表 for(var i=1;i<10;i++){ for(var j=1;j<10-i;j++){ document.write(j+'*'+i+'='+(i*j)+'\t'); } document.write('<br />'); } 写出100以内的所有质数 for(var i = 2;i<100;i++){ var flag = true for(var j = 2;j<i;j++){ if(i%j == 0){ flag = fasle; } } if(flag){ document.write(i); } }
break和continue:
- break关键字可以用来退出switch或循环语句,不能放在if语句中使用
for(var i=0;i<5;i++){
console.log('out'+i);
for(var j=0;j<5;j++){
break;
console.log('inner'+j); //终止内层循环
}
}
// 可以为循环语句创建一个label,来标识当前的循环
// label:循环语句
outer:
for(var i=0;i<5;i++){
console.log('out'+i);
for(var j=0;j<5;j++){
break;
console.log('inner'+j);
}
} // 这个循环的名称叫outer
//这样break就可以指定停止的循环
outer:
for(var i=0;i<5;i++){
console.log('out'+i);
for(var j=0;j<5;j++){
break outer; //终止外层循环
console.log('inner'+j);
}
}
```javascript
- continue
- continue默认是对最近的循环起作用
for(var i = 0;i<5;i++){
if(i==2){
continue; // 跳过当次循环
}
console.log(i);
}
// 0,1,3,4,5
for(var i = 0;i<5;i++){
for(var j=0;j<5;j++){
if(j==1){
continue; // 内层循环没有1
}
console.log(j);
}
}
## 优化质数
测试程序的性能
程序执行之前,开启计时器
console.time()可以用来开启一个计时器
它需要一个字符串作为参数,这个字符串会作为计时器的一个标识
```javascript
console.time("test");
for(var i = 2;i<100;i++){
var flag = true
for(var j = 2;j<i;j++){
if(i%j == 0){
flag = fasle;
}
}
if(flag){
document.write(i);
}
}
console.timeEnd("test"); // 用来停止一个计时器,传递停止的参数
for(var i = 2;i<100;i++){
var flag = true
for(var j = 2;j<i;j++){
if(i%j == 0){
flag = fasle;
break; //进入这里说明ta已经是一个偶数了,所以没必要再往下面继续去循环,可以节省大量的时间,当数据很大时
}
}
if(flag){
document.write(i);
}
}
var res = Math.sqrt(4); // 2 对一个参数进行开放
for(var i = 2;i<100;i++){
var flag = true
for(var j = 2;j<=Math.sqrt(i);j++){ // 只要判断最小的偶数集就可以了
if(i%j == 0){
flag = fasle;
}
}
if(flag){
document.write(i);
}
}