JavaScript基础知识(4)

来源:互联网 发布:java工资待遇如何 编辑:程序博客网 时间:2024/06/01 07:39
 回顾:
 方法参数:是方法内处理逻辑必须的数据。参数仅限方法内部使用,方法外无法访问方法的参数变量。参数名称自定义。
 返回值:调用者是否需要获得方法的执行结果决定是否需要返回值。
 function add(a,b){
 var sum=a+b;
 return sum;
 }
 调用方法1:add(5,10);
 调用方法2:
 var a=5;
 var b=10;
 var r=add(a,b);

 方法完成之后,内部作用域及其局部变量都销毁!

 分支结构:
 if结构:1件事,可做可不做;
 if..else..:2件事,必须二选一;
 if...else if...[else...]:多件事,多选一执行。


 正课:
 switch...case...多条分支,根据条件判断,选择执行
 语法:
 switch(表达式){
   case 表达式1:
        代码段1;   //如果表达式的值===表达式1的值
   case 表达式n:
        代码段n;   //如果表达式的值和所有case都不相等
        default:
      默认代码段;
 }

 例:
 var score=parseInt(prompt("请输入分数"));
      switch(true){
    case   score>=90:
       console.log("A");
       break;
    case  score>=80:
       console.log("B");
       break;
    case  score>=60:
       console.log("C");
       break;
    default:
       console.log("D");
 }


 switch...case...运行机制:如果找到与表达式值匹配的case,不但执行当前case下的代码,而且之后所有代码都被触发,不会再判断而直接执行后面所有的代码!

 break:退出当前结构,后面的代码都不会执行。
 当两个条件使用同一个处理的时候,前面的条件后面不需要加break;即多个条件共用同一套执行逻辑时,不加break。

 switch...case...的效率不高,在js中使用的少。要先算出比较比较的条件值,再和条件相比较。

 js中的switch里面的()和case后面的条件,可以放任何东西,不仅仅是数字!这是和其他语言不同的。

 switch表达式和表达式之间的比较,是严格相等,没有自动类型转换!===数值和数据类型都要相等。


 var num=parseInt(prompt("请选择服务种类:"));
 switch(num){
 case 1:
    console.log("余额查询中");
    break;
 case 2:
    console.log("取款进行中");
    break;
 case 3:
    console.log("转账进行中");
    break;
 case 0:
    console.log("退出系统");
    break;
 default:
    console.log("输入有误");
 }

 prompt输进去的都是字符串!!


 循环结构:程序反复执行同一套代码段,但是遇到结束条件会结束执行。如果没有循环结束条件,就会永远循环执行,这叫死循环。

 循环三要素:
 1.循环条件:循环继续执行的条件。一旦循环条件不满足,循环立刻退出。
 2.循环变量:用于循环条件中做判断的变量。循环变量都会向着循环退出的趋势变化(不满足循环条件的趋势)。也叫循环计数器。
 3.循环体:每次循环要做的事情

 while循环:当满足条件时,就继续循环做...事

 语法:
 var 循环变量;
 while(循环条件){
    循环体;
    迭代变化循环变量;
 }

 例:
 var round=0;
 while(round<3){
   if(round==2){
     console.log("晕");
      break;
     }
   console.log("转"+round+"圈");

   round+=1;
 }
 console.log("停车");

 while中何时用break:循环条件不满足之前,希望强行退出循环。
 如何使用break?可以放在任何需要退出循环的位置。

 例:
 var n=10;
    var input= -1;
    while(input!=n&&input!="exit"){
        input=prompt("你猜:");
        if(input!=""){
          if(input=="exit"){
           console.log("放弃了");
           break;
        }else{
          input=parseInt(input);
            if(n>input){
                alert("小了");
            }else if(n<input){
                 alert("大了");
            }else{
                alert("猜对了");
                document.write("正确答案:"+n);
            }
          }
         }else{
             alert("请重新输入");
         }
   }


 取随机数:Math.random():0<=n<1
 取任意min-max之间取随机数公式:parseInt(Math.random()*(max-min+1)+min)
 例:取60到100之间的随机数:
 0<=n<1
 0<=n*41<41
 60<=n*41+60<101
 60<=parseInt(n*41+60)<=100

 parseInt(Math.random()*(max-min+1)+min)



 循环三要素:
 1.循环条件:判断继续循环的条件
 2.循环变量:循环条件中用于比较的变量。--循环计数器
 3.循环体:

 break:退出当前结构,继续运行后续程序

 while:如果第一次循环条件不满足,
 var 循环变量;
 while(循环条件){
   循环体;
   迭代变换循环变量;
 }

 do-while循环:先做,再判断。先执行一次循环体,再判断是否继续!和while循环的差别就是,do-while循环如果循环条件不满足,循环体至少可以执行1次。

 语法:
 var 循环变量;
  do{
   循环体;
   迭代变换循环变量;
  }while(循环条件);

 例:
 var n=10;
 do{
    var input=prompt("你猜");
    if(input=="exit"){
      console.log("放弃了");
      break;
    }else{
      input=parseInt(input);
      if(n>input){alert("小了");
      }else if(n<input){alert("大了");
      }else{alert("猜对了");
      }
    }
 }while(input!=n);


 js的循环语句中,变量声明提前:相同作用域内,var...无论出现在什么位置,解析时,优先提取到js开始位置“声明”!

 但是在方法中,声明的变量不能在其他地方使用,因为不在相同作用域内。
 function fun(){
    var card=10;
 }
 fun();
 console.log(card);  //出错!

 while vs do while:
 如果第一次条件就可能不成立,也想执行一次,必须用do while;如果第一次条件一定满足,do while等效于while。

 for循环语句:完全等效于while循环。
 for循环使用条件:循环变量变化规律固定,循环次数已知/固定。

 for循环语法:
 for(声明并初始化循环变量;循环条件;迭代循环变量){
    循环体;   
 }

 和while循环一样,for循环的迭代循环变量是在循环体之后执行的。

 例:
 var sum=0;
 for(var n=1;n<=100;n++){
    sum+=n;
 }
 console.log(sum);

 for循环是一个结构,不是一个完整的功能,不能和函数那样实现完整的功能。只有function才有作用域,for里面的参数是没有作用域的。

 上述例子可以用下面的写法实现:
 for(var n=1,sum=0;n<=100;sum+=n++);
 console.log(sum);

 可以同时声明多个变量,用逗号隔开;简写循环体到圆括号里面。for循环可以有多种写法的,从而实现更高效率。

 for语句中声明初始化变量是可以拿出来,迭代循环变量也可以拿出来的。但是没有循环变量的循环就是死循环!

 break在任何循环中都可以使用的。

 continue:跳过本轮循环,继续执行下一轮循环;

 例:
 var bao=4;
 for(var box=1;box<=9;box++){
   if(box==bao){
    continue;
   }
   console.log("跳到"+box);
 }

 例:找出2000年以后的5个闰年并输出
 var count=0;
 var year=2001;
 while(count<5){
   if((year%4==0&&year%100!=0)||(year%400==0)){
    console.log(year);
    count++;
   }
   year++;
 }

 上述例子可以用下面的方法实现,year+=4可以提高效率
 var count=0;
 var year=2001;
 while(count<5){
   if((year%4==0&&year%100!=0)||(year%400==0)){
    console.log(year);
    count++;
   }
  if(count>0){
    year+=4;
  }
   year++;
 }


 九九乘法表:
 第一步:做出第9行的:
 var str="";
 for(var a=1;a<=9;a++){
    str+=a+"*9="+(a*9)+" ";     
 }
 console.log(str);

 第二步:从简单办法中找规律:
 for(var n=1;n<=9;n++){
   var str="";
   for(var a=1;a<=n;a++){
    str+=a+"*"+n+"="+(a*n)+" ";     
 }
 console.log(str);
 }

 遇到复杂的问题:先用简单办法做最简单的事情,从简单办法中找规律!

 类似的打印星星:
 for(var n=1;n<=9;n++){
   var str="";
   for(var a=1;a<=n;a++){
    str+="*";     
 }
 console.log(str);
 }


 例:
 var sum=0;
 var count=0;
 do{
   var input=parseInt(prompt("请输入成绩:"));
   if(input==-1){
   break;
   }else{
    sum+=input;
    count++;
   }
 }while(true);
 console.log("平均分"+(sum/count).toFixed(2));


 水仙花数,也叫自恋数
 for(var num=100;num<=999;num++){
   var one=num%10;  //个位
   var ten=parseInt((num%100)/10);//
   var hd=parseInt(num/100);  //百位
   if(num==hd*hd*hd+ten*ten*ten+one*one*one){
    console.log(num);
   }
 }
0 0