转码日记——Javascript笔记(3)

本文详细探讨了JavaScript中的流程控制语句,包括条件判断(if语句)、条件分支(switch语句)、循环(while和for循环)以及break和continue关键字的使用。通过实践练习,帮助读者更好地掌握这些基本概念。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

代码块(只具有分组的作用)

代码块内部的内容在外部也是完全可见的

console.log("hello, world"); // 一个单独的语句

{
document.write("goodbye");
alert("FBI-warning");
} //大括号中的是一组语句,也叫代码块,要么都执行,要么都不执行

流程控制语句

控制程序执行的流程,使程序可以根据一定的条件来选择执行

(1)条件判断语句(if语句)- 可以在执行某个语句之前进行判断,条件成立才会执行语句,不成立则不执行

//语法一: if(条件判断句)语句
var a = 20;
if(a>10)
    alert("a比10大"); 

//但是if语句只能管紧随其后的语句,如果要控制多条语句则需要写代码块
var a = 20;
if(a>10){
    alert("a比10大"); 
    alert("正确");
}
/*语法二:if(条件判断句{
               语句...
          }else {
                语句...
          }*/

/*语法三:if(条件判断句{
               语句...
          }else if {
                语句...
          }else{
                语句...
          }     */
var age = 40;
if(age>=50 && age<100){
alert("身体健康");}else if(age<50){
alert("发财");}else {
alert("天天开心");}

练习

//prompt()可以弹出一个提示框,用户可以在框中输入内容,该函数需要一个字符串作为参数,该字符串会成为提示框的文字
var score = prompt("请输入小明的成绩:");
if(score==100){alert("奖励你一台宝马");
}else if(score>80 && score<=99){alert("奖励你一部手机");
}else if(score>60 && score<=80){alert("奖励你一本书");
}else {alert("啥也没有");
}


//将num1,num2,num3从小到大输出
var num1 = +prompt("请输入身高(cm):");
var num2 = +prompt("请输入财富(w):");
var num3 = +prompt("请输入颜值(px):");
// prompt()函数输入默认的是String,所以比较之前要先转换成Number
if(num1<num2 && num1<num3){
    if(num2<num3){alert(num1+","+num2+","+num3);
    }else{alert(num1+","+num3+","+num2);}
}else if(num2<num1 && num2<num3){
    if(num1<num3){alert(num2+","+num1+","+num3);
    }else{alert(num2+","+num3+","+num1);}
}else{
     if(num1<num2){alert(num3+","+num1+","+num2);
    }else{alert(num3+","+num2+","+num1);}
}

(2)条件分支语句(switch语句)— 判断switch后面的条件表达式和case后的表达式是否全等(如果数据类型不一样也是false)

/* 语法:switch(条件表达式){
               case 表达式:
               语句...
               break;
               case 表达式:
               语句...
               break;
               default:
               语句...
               break;
}
*/
switch(num){
      case 1:
          alert("壹");
      break; 
//退出语句必须要有break,保证只执行当前语句,不然只要符合case条件会执行全部下面的语句
      case 2:
          alert("贰");
      break;
      default:
          alert("非法数字");
      break;
//如果所有的比较结果都是false,则直接执行default后的语句
}

练习

var score = +prompt("请输入成绩:");
switch(parseInt(score/10)){ // 保证score/10是一个整数,默认是浮点数
    case 10:
    case 9:
    case 8:
    case 7:
    case 6:
/*如果case的执行结果都是一样,可以不用每条都写,因为只要符合上面的,不写break,就会自动执行到最下面*/
    alert("合格");
    break;
    default:
    alert("不合格");
    beak;
}

switch(true){
    case score>=60:
        alert("合格");
    break;
    default:
        alert("不合格");
    break;
}

(3)循环语句—反复执行一段代码多次

     1. while语句

/*语法:
while(条件表达式){
    语句...
} 
先判断再执行
*/
//先对条件表达式进行求值判断,如果是true则执行循环体,知道求值变为false结束循环

var i = 0; //1.创建初始化变量
while(i<10){  //2. 在循环中设置一个表达式
    i++;   //3.定义一个表达式,每次更新初始化变量
}

/* 语法: 
do{
语句...} while(条件表达式)
先执行再判断,保证循环体至少执行一次
*/

var i =0;
do{
console.log(i++);}while(i<=10);

练习:

var money = 1000;
var year = 0;
while(money<5000){
money *= 1.05;
year++;
}
console.log("一共需要"+ year + "年");


while(true){
    var score = +prompt("请输入小明的成绩:")
    if(score>=0 && score<=100){
    break;}    
}

2. for循环

/* 语法:
for(初始化表达式;条件表达式;更新表达式){
语句...
}
*/
//求1-100的奇数之和
for(var i=0,sum= 0; i<=100; i++){
    if(i%2 !=0){ //筛选奇数
        sum= sum+i;}
}
console.log(sum);
//1-100中7的倍数的个数和总和
for(var i=1, var sum=0, var count=0;i<=100; i++){
    if(i%7==0){
        sum += i;
        count++}
}
console.log(sum+ count);

//水仙花数
for(var i=100;i<1000;i++){
    var bai = parseInt(i/100);
    var shi = parseInt((i-bai*100)/10);
    var ge = i%10;
    if(bai*bai*bai+shi*shi*shi+ge*ge*ge==i){
        console.log(i);
        }
}

//判断用户输入的数字是否是质数
        var num = +prompt("请输入一个大于一的数字:");
        var flag = true;
        if (num <= 1) {
            alert("请输入合法数字"); //保证数据的合法性
        } else {
            for (var i = 2; i < num; i++) {
                //如果可以整除则一定不是质数
                if (num % i == 0) { flag = false; }
            }
        }
        if (flag) {
            alert("这是质数");
        } else {
            alert("这不是质数");
        }

for循环的嵌套

//在用户页面输出图形
//控制高度
for(var i=0;i<5;i++){
//控制宽度
    for(var a=0;a<i+1;a++){
        document.write("*");
//外部循环执行一次,内部循环执行五次
        }
    document.write("</br>");
}

//倒着的三角形
for(var i = 0; i<5; i++){
    for(var j = 0; j > j-i; j++){
        document.write("*");
        }
    document.write("</br>");
}

//打印99乘法表
for (var i = 1; i <= 9; i++) {
     for (var j = 1; j <= i; j++) {
         document.write(j + "*" + i + "=" + (i * j) + "&nbsp;&nbsp;&nbsp;");
         }
     document.write("</br>");
}

//打印1-100中所有的质数
for (var i = 2; i <= 100; i++) {
     var flag = true; //注意flag的位置,写true是默认是质数
     for (var j = 2; j < i; j++) {
          if (i % j == 0) {
              flag = false;
          }
     }
     if (flag) {
         document.write(i + "</br>");
         }
     }

(4)break & continue

break关键字可以退出switch和循环语句,但是不可以用于if

for(var i=0;i<5;i++){
    console.log(i);
    if(i==2){
       break;}
}//只返回1和2
//这里的break虽然是写在if里,但是是对for循环起作用

//break关键字只会立即终止离他最近的循环
for(i=0;i<5;i++){
    console.log("@外层循环");
    for(j=0;j<5;j++){
        break; //不会影响外部循环
        console.log("内层循环");
    }
}

//循环可以起名字,break就可以结束指定循环
outer: //循环的名字
for(i=0;i<5;i++){
    console.log("@外层循环");
    for(j=0;j<5;j++){
        break outer; //指定结束外部循环
        console.log("内层循环");
    }
}

continue关键字可以跳过当次循环

for(i=0;i<5;i++){
    if(i==2){
        continue;} //一旦执行continue则不会再执行console,而是返回上面for循环去判断
        console.log(i);
}
//continue也是默认跳过离得最近的循环,但是也可以像break一样通过起名字跳过指定循环
//优化质数
//添加计时器检测性能 1.添加break
console.time("test");//开启计时器,test是计时器的名字
for (var i = 2; i <= 100; i++) {
     var flag = true; 
     for (var j = 2; j < i; j++) {
          if (i % j == 0) {
              flag = false; 
              break; //一旦发现可以整除没有余数的直接跳出该循环来提高性能
          }
     }
     if (flag) {
         document.write(i + "</br>");
         }
     }
console.timeEnd("test"); //停止计时,停止哪个就写哪个名字

//继续优化 2.缩小取值范围
for (var i = 2; i <= 100; i++) {
     var flag = true; 
     for (var j = 2; j <= Math.sqrt(i); j++) { /*j只需要小于根号i即可,因为在根号i之前的数字都已经是j的因数了,使用Math.sqrt();函数进行开方*/
          if (i % j == 0) {
              flag = false; 
              break; 
          }
     }
     if (flag) {
         document.write(i + "</br>");
         }
     }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值