JavaScript学习 第二篇

十七、运算符的优先级

运算符:使用,可以分割多个语句,一般可以在声明多个变量时使用
就和数学中一样,在JS中,运算符也有优先级

比如:先乘除  后加减
在JS中有运算符优先级的表
在表中,越靠上,优先级越高;优先级越高,越优先计算
遇到优先级不清楚的,可以使用(),改变优先级
<script>
        var a;
        a = (1 || 2) && 10;
        document.write("a =" + a );
    </script>

在这里插入图片描述

十八、代码块

我们的程序是由一条一条语句构成的,
语句是按照自上向下的顺序一条一条执行的。

在JS中,可以使用{}来为语句分组
同一个{}中的语句,我们称为是一句语句,它们要么都执行,要么都不执行,
一个{}中的语句,我们也称为代码块
在代码块的后边就不用再编写;了。
JS中的代码块,只具有分组的作用,没有其他的用处,代码块内容的内容,在外部是完全可见的
    <script>
        {
            var a;
            a = 10;
            ++a;
            a++;
            document.write("a =" + a);
            console.log("a = " + a);
        }
            a++;
            document.write("<br>");
            document.write("a = " +a);
    </script>

十九、流程控制语句

流程控制语句

JS中的程序是从上到下一行一行执行的,
通过流程控制语句可以控制程序执行流程,
使程序可以根据一定的条件来选择执行。

语句的分类:
1.条件判断语句
2.条件分支语句
3.循环语句

1.if语句(条件判断语句)

使用条件判断语句可以再执行某个语句之前进行判断,
如果条件成立才会执行语句,条件不成立则语句不执行。

语法一:
if(条件表达式)
    {
      语句......
    }
if语句在执行时,会先对条件表达式进行求值判断,
如果条件表达式的值为true,则执行if后的语句,
如果条件表达式的值为false,则不会执行if后的语句。

if语句只能控制紧随其后的那个语句,如果希望if语句可以控制多条语句,
可以将这些语句统一放到代码块中。

if语句后的代码块不是必须的,但是在开发中尽量写上代码块,即使只有一条
语法二:
if(条件表达式)
  {
    语句......
  }
  else
  {
    语句......
  }
  
  当该语句执行时,会先对if后的条件表达式进行求值判断
  如果该值为true,则执行if后的语句
  如果该值为false,则执行else后的语句
语法三:
if(条件表达式){
  语句......
}
else if(条件表达式){
  语句......
}
else if(条件表达式){
  语句......
}

当该语句执行时,会从上到下依次对条件表达式进行求值判断
如果值为true,则执行当前语句;
如果值为false,则继续向下判断。
如果所有的条件都不满足,则执行最后一个else后的语句

该语句中,只会有一个代码块被执行,一旦代码块执行了,则直接结束语句
语法四:
if(条件表达式){
  语句......
}else{
  if(条件表达式){
    else if(条件表达式){
      语句......
    }else if(条件表达式){
      语句......
    }
  }
}
if语句的一些总结:
1.需要理解透&&与||的含义;
2.可以使用promp函数,进行数据的输入:

prompt()可以弹出一个提示框,该提示框中会带有一个文本框, 
用户可以在文本框中输入一段内容,该函数需要一个字符串作为参数,
该字符串将会作为提示框的提示文字。
用户输入的内容,将会作为函数的返回值返回,可以定义一个变量来接受该内容

3.因为prompt()函数是以字符串作为返回值,所以可以将前面添加一个一元运算符 +,
使其自动替换为number类型
例如:var a = +prompt();

4.比较n个(3个及以上)的数值时,可以先定下一个,再慢慢比较剩下的n-1个数值,
依次逐渐减少
    <script>
     /*    if(false)
        alert("你好,朋友");
        var a = 1;
        if(a > 7)
        {
        alert("a =" + a);
        alert("你喜欢我嘛?");
        } */
        //var height = 165;
/*         if(a >= 10 && a <= 20)
        {
            alert("a大于等于10,且a小于等于20");
        } */
/*         if(height >= 170){
            alert("我的身高大于等于170");
        }
        else{
            alert("我的升高小于170");
        }  */
        var favorability = 10;
        if(favorability >= 80 && favorability <= 100)
        {
             document.write("我们两个是知音哦!");
        }
        else if(favorability >=60 && favorability < 80)
        {
            document.write("我们两个是好朋友哦!");
        }
        else if(favorability >= 40 && favorability < 60)
        {
            document.write("我们两个只是普通朋友。");
        }
        else if(favorability >= 20 && favorability <40)
        {
            document.write("你看起来有些面熟。");
        }
        else if(favorability >=0 && favorability <20)
        {
            document.write("陌生人,你好。");
        }
    </script>

<1>.if语句练习1

    <script>
/*         var grades = prompt("请输入小明的期末成绩:");
        if (grades >100 || grades < 0){
            document.write("满分是100分哦,请输入范围内的数值(0~100)");
        }
        else if(grades == 100){
            document.write("奖励一辆BMW");
        }else if(grades >= 80 && grades <= 99){
            document.write("奖励一台iphone15s");
        }else if(grades >= 60 && grades < 80){
            document.write("奖励一本参考书");
        }else if(grades <= 60){
            document.write("什么奖励都没有");
        }
 */
        var grades = prompt("请输入小明的期末成绩:");
        if(grades > 100 || grades < 0 || isNaN(grades)){
            document.write("满分是100分哦,请输入范围内的数值(0~100)");
        }
            else{
                if(grades == 100){
                    document.write("奖励一辆BMW");
                }else if(grades >= 80 && grades <= 99){
                    document.write("奖励一台iphone15s");
                }else if(grades >= 60 && grades < 80){
                    document.write("奖励一本参考书");
                }else if(grades <= 60){
                    document.write("什么奖励都没有");
                }
        }   
    </script>

<2>.if语句练习2

    <script>
        var height = prompt("请输入您的升高:(cm)");
        var money  = prompt("请输入您的财富值:(万)");
        var appearance = prompt("请输入您的相貌值:");
        if(height > 180 && money > 1000 && appearance > 500){
            alert('我一定要嫁给他');
        }else if(height > 180 || money > 1000 || appearance > 500){
            alert('嫁吧,比上不足,比下有余。');
        }else if(height < 180 && money < 1000 && appearance < 500){
            alert('不嫁!');
        }
    </script>

<3>.if语句练习3

    <script>
        var num1 = +prompt("请输入num1的数值:");
        var num2 = +prompt("请输入num2的数值:");
        var num3 = +prompt("请输入num3的数值:");
        if(num1 < num2 && num1 < num3){         // num1最小,比较num2和num3
            if(num2 < num3){
                alert("num1 \n num2 \n num3");
            }else if(num3 < num2){
                alert("num1 \n num3 \n num2");
            }

        }else if(num2 < num1 && num2 < num3){   // num2最小,比较num1和num3

            if(num1 < num3){
                alert("num2 \n num1 \n num3");
            }else if(num3 < num1){
                alert("num2 \n num3 \n num1");
            }
        }else if(num3 < num2 && num3 < num1){   // num3最小,不叫num1和num2
            if(num1 < num2){
                alert("num3 \n num1 \n num2");
            }else if(num2 < num1){
                alert("num3 \n num2 \n num1");
            }
        }
    </script>

2.条件分支语句(switch语句)

语法:
  switch(条件表达式){
  case 表达式:
       语句...
        break;
  case 表达式:
       语句...
        break;
  case 表达式:
       语句...
        break;
    case 表达式:
       语句...
        break;
      default:
       语句...
        break;
  }
  执行流程:
  switch...case...语句
  在执行时会一次将case后的表达式的值和switch后的条件表达式的值进行全等比较。
  
  如果比较结果为true,则从当前case处开始执行代码,
  当前case后的所有代码,都会被执行,我们可以在case的后边跟着一个break关键字,
  这样,可以确保只会执行当前case后的语句,而不会执行其他的case;
  
  如果比较结果为false,则继续向下比较,
  如果所有的比较结果都为false,则只执行default的语句。

  注:switch语句和if语句的功能实际上有重复的,使用switch可以实现if的功能,
  同样使用if也可也实现switch的功能,
  所以,我们在使用时,可以根据自己的习惯选择。(平常,我们if会用的多点)
    <script>
        var a = 2;
        switch(a){
            case 1 :
                alert("壹");
                break;
            case +"2" :
                alert("贰");
                break;
        }
    </script>

<1>.switch语句练习1

    <script>
        var  grades = +prompt("请输入该学生的成绩(范围是:0~100):");
        switch(grades >= 60){
            case   true :
                alert("合格")
                break;
            case   false :
                alert("不合格")
                break;
        }
    </script>

<2>.switch语句练习2

    <script>
        var a = +prompt("请输入您的数值(范围是:1~7):");
        switch(a){
            case 1 :
                alert("今天是星期一哦~")
                break;
            case 2 :
                alert("今天是星期二哦~")
                break;
            case 3 :
                alert("今天是星期三哦~")
                break;
            case 4 :
                alert("今天是星期四哦~")
                break;
            case 5 :
                alert("今天是星期五哦~")
                break;
            case 6 :
                alert("今天是星期六哦~")
                break;
            case 7 :
                alert("今天是星期七哦~")
                break;
            default :
                alert("非法数字,不可以哦")
                break;
        }
    </script>

3.循环语句

通过循环语句,可以反复的执行一段代码多次

1.while语句循环

语法:
while(条件表达式){
  语句...
}

while语句在执行时,先对条件表达式进行求值判断,
如果值为true,则执行循环体,循环体执行完毕以后,继续对表达式进行判断,
如果为true,则继续执行循环体,以此类推。
如果值为false,则终止循环
例如: 
写法一:
  var x = 1;
        while(true){    
            alert(x++);
            if(x == 10){    //判断x是否是10
                break;      //退出循环
            }
        }
        
像这种将条件表达式写死为true的循环,叫做死循环。
该循环不会停止,除非浏览器关闭,死循环在开发中慎用,可以使用break,来终止循环。
创建一个循环,往往需要三个步骤:
1.创建一个初始化变量
var x = 0;

2.在循环中设置一个条件表达式
while(x < 10){
}

3.定义一个更新表达式,每次更新初始化变量

例如:
    var x = 0;
        while(x < 7274){
            x++;
            document.write(x +"<br>");
        }
   <!--  <script>
        var x = 1;/*像这种将条件表达式写死为true的循环,叫做死循环。
                    该循环不会停止,除非浏览器关闭,死循环在开发中慎用,可以使用break,来终止循环*/
        while(true){    
            alert(x++);
            if(x == 10){    //判断x是否是10
                break;      //退出循环
            }
        }
    </script> -->
    <script>
        var x = 0;
        while(x < 7274){
            x++;
            document.write(x +"<br>");
        }
    </script>
<1>.while语句练习1
    <script>
        var money = 1000;
        var num = 1;
        while(money <= 5000 && num){
            money = money * 1.05;
            document.write("第"+ num++ +"年.是"+ money + "<br>");
        }
    </script>
<2>.while语句练习2
    <script>
    while(true){
        var grades = prompt("请输入小明的期末成绩:");
        if(grades >= 0 && grades <= 100){
            break;
        }
        alert("请输入有效数值:");
    }
    //var grades = prompt("请输入小明的期末成绩:");    //多次一举,重复了,已经在while语句中,定义过grades了
    if(grades > 100 || grades < 0 || isNaN(grades)){
        document.write("满分是100分哦,请输入范围内的数值(0~100)");
    }
        else{
            if(grades == 100){
                document.write("奖励一辆BMW");
            }else if(grades >= 80 && grades <= 99){
                document.write("奖励一台iphone15s");
            }else if(grades >= 60 && grades < 80){
                document.write("奖励一本参考书");
            }else if(grades <= 60){
                document.write("什么奖励都没有");
            }
    } 
    </script>

2.do…while语句循环

语法:
do{
  语句...
}while(条件表达式);
执行流程:
do...while语句在执行,会先执行循环体,
循环体执行完毕以后,在对while后的条件表达式进行判断。 

如果结果为true,则继续执行循环体,执行完毕继续判断,以此类推;
如果结果为false,则终止循环
while语句与do...while语句的区别:
实际上这两个语句功能类似,
不同的是while是先判断后执行。

而do...while会先执行后判断
do...while可以保证循环体至少执行一次,
而while 不能(while 一般会用的多一点)
    <script>
        var x =1;
        do{
            document.write(x++ +"<br>");
        }while(x < 200);
    </script>

3.for语句循环

在for循环中,为我们提供了专门的位置,用来放三个表达式:
1.初始化表达式;
2.条件表达式;
3.更新表达式。

for循环的语法:
for(初始化表达式;条件表达式;更新表达式){
  语句...;
}
执行流程:
1.执行初始化表达式,初始化变量;(初始化表达式只会执行一次 )
2.执行条件表达式,来判断是否执行循环,
如果为true,则执行循环;

3.如果为false,则终止循环;

4.执行更新表达式,更新表达式执行完毕,
继续重复   2
类似于:1.原材料→2.设计→3.加工→4.完成

注:
1.for循环中的三个部分都可以省略,也可也写在外部;

2.如果在for循环中不写任何的表达式,只写两个;,此时,
循环是一个死循环,会一直执行下去,慎用
<1>.for语句循环练习1
    <script>
        var sum = 0;                                //新定义一个变量 ,用来存储每次累加的结果
        for(var a = 1 , sum = 0; a <= 100 ; a++ ){
            if(a % 2 == 1){                         //对a取模,如果a的余数为1,则必定是奇数,则可进行后续流程
                sum = sum + a;                      //for每循环一次,上一次所得的a,都会不断往sun上添加,从而使sun的数值不断累加
            }
        }
        document.write(sum);
    </script>
<2>.for语句循环练习2
    <script>
        var num = 0;
        for(var a = 1 , sum = 0 ,num; a <= 100 ; a++ ){
            if(a % 7 == 0){
                sum = sum + a;
                num++
            }
        }
        document.write("第"+ num  +"个." + sum);
    </script>
<3>.for语句循环练习3
    <script>
        for(var i = 100 ; i < 1000 ; i++){      //根据题目直接把所有的3位数列出来,不用担心页面会写出很多数值,后续会不断删去,最终得到想要的数。
            var bai = parseInt(i / 100);        //获得百位数
            var shi = parseInt(i % 100 / 10);   //获得十位数
            var ge = i % 10;                    //获得个位数,尽量采用这样的方法
            if(bai*bai*bai + shi*shi*shi + ge*ge*ge == i){      //条件判断
            document.write(i + "<br>");         //类似这种罗列数据的,直接可在循环语句中输出
            }
        }
    </script>
<4>.for语句循环练习4
    <script>
        var num = prompt("请输入您的数值:");        //定义输入数值的量
        var flag = true;                            //定义一个标志,可以保存输入的状态。目的:将难以相反判断的循环(循环不得不执行),重新定义为false,进而可以让语句继续执行
        if(num <=1 || isNaN(num)){                  //确保用户输入的是大于1的数值
            alert("请输入有效数值哦!");
            var num = prompt("请输入您的数值:");
        }else {                                      //判断输入的数值是否是质数
            for(var i=2 ; i<num ; i++){             //定义在2-num之间的数值,用于判断
                if(num % i == 0){                   //如果num被i整除,则一定不是质数。既然判断了这个数不是质数,就可以反过来判断,
                                                    //其他输入的是质数。
                    alert("对不起,您输入的不是质数!");
                    flag = flase;                   //用户希望输出是质数的结果,根据for语句循环的特性,一旦执行当前语句,则会直接结束语句,
                                                    //那么,我们就需要将当前语句结果为false,如此,既可以确定用户输入的一定是质数(不是质数的,在此次循环中早已确定了),又可以进行后续操作。
                }                              
            }if(flag){
            alert("恭喜您,您输入的是一个质数!");}
        } 
    </script>

4.嵌套的for循环

通过程序,在页面中输出如下的图形:

*
**
***
****
*****

通过一个for循环来输出图形,
这个for循环执行几次,图形的高度就是多少。

它可以用来控制图形的高度;
在循环的内部再创建一个循环,用来控制图形的宽度,
例如:
for(var i=1 ; i <=6 ; i++){
            for(var j=1 ; j <=6 ; j++){
                document.write("*"+ "<br>");
            }
        }
目前我们的外部的for循环每执行1此,内部的for循环就会执行5次,
内层循环可以来决定图形的宽度,执行几次,图形的宽度就是多少
    <script>
        for(var i=1 ; i<=6 ; i++){
            for(var j=1 ; j<=i ; j++){
                document.write("*&nbsp;&nbsp;&nbsp;");
            }
            document.write("<br>");
        }
    </script> 
<1>.嵌套的for循环练习1
    <script>
        for(var i=1 ; i<=6 ; i++){
            for(var j=1 ; j<=6-i ; j++){
                document.write("*&nbsp;&nbsp;&nbsp;");
            }
            document.write("<br>");
        }
    </script>
<2>.嵌套的for循环练习2
    <script>
        for(var h=1 ; h <=20 ; h++){
            for(var w=1 ; w<=h-1 ; w++){
                document.write("<span>" + w + "*" + h + "=" + h*w + "</span>");
            }
            document.write( w + "*" + h + "=" + h*w + "<br>");
        }
    </script>
<3>.嵌套的for循环练习3
    <script>
/*         var i = prompt("请输入您的数值:");
        var flag = true;
        if(i <= 1 || isNaN(i)){
            alert("请输入有效数值!");
            var i = prompt("请输入您的数值:");
        }else{
            for(var j = 2 ; j < i ; j++){
                if(i % j == 0){
                    alert("对不起哦,您输入的不是一个质数!");
                    flag = false;
                }
            }
            if(flag){
                document.write("恭喜您,您输入的是一个质数哦!");
            }
        } */
        //以上为错误示范
        
        for( var i = 2 ; i <= 100 ; i++){ 
            var flag = true;
            for(var j = 2 ; j < i ; j++){
                if(i % j == 0){
                    flag =false;
                }
            }
            if(flag){
                document.write(i + "<br>");
            }   
        }
    </script>
<4>.嵌套的for循环练习4
    <script>
        for( var i = 2 ; i <= 100 ; i++){ 
            var flag = true;
            for(var j = 2 ; j < Math.sqrt(i) ; j++){
                if(i % j == 0){
                    flag =false;
                }
            }
            if(flag){
                document.write(i + "<br>");
            }   
        }
    </script>

5.break和continue

<1>.break
break关键字可以用来退出switch或循环语句,
不能在if语句中使用break和continue,
break关键字,会立即终止离它最近的循环语句。

可以为循环语句创建一个label,来标识当前的循环
<2>.label:
使用break语句时,可以在break后跟着一个label
这样break将会结束指定的循环,而不是最近的
<3>.continue
continue关键字,可以用来跳过当此循环

在程序执行前,开启计时器,
console.time()可以用来开启一个计时器,
它需要一个字符串作为参数,这个字符串将会作为计时器的标识,
console.timeEnd()可以用来关闭一个计时器。
    <script>
        /* for(var i=0 ; i<=5 ; i++){
             document.write(i + "<br>");
            if(i == 2){
                break;
            }
        } */

      /*   a:for(var i = 0 ; i <= 5 ; i++){
            document.write("@外层循环" + i +"<br>");
            for(var j = 1 ; j <= 5 ; j++){
                document.write("内层循环" + j + "<br>");
                if(j == 3){
                    break a;
                }
            }
        } */

       /*  for(var i=0 ; i<=5 ; i++){
            if( i==3){
                continue;
            }
            document.write(i + "<br>");  
        } */

        console.time("text");
        for( var i = 2 ; i <= 10000 ; i++){ 
            var flag = true;
            for(var j = 2 ; j < (i/2) ; j++){
                if(i % j == 0){
                    flag =false;
                    break;                      //一旦进入了判断,则证明i不可能时质数了,此时循环再执行已经没有任何意义了,使用break来结束循环
            }                                   //不加break 75ms
        }                                       //加break   17ms
            if(flag){
                //document.write(i + "<br>");
            }   
        }
        console.timeEnd("text");
    </script>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值