一、条件语句 

  1、if语句 

    条件语句是通过判断指定表达式的值来决定执行还是跳过某些语句,这些语句是代码的“决策点”有时称之为“分支”。

    if语句是一种基本的控制语句,它让Javascript程序可以选择执行路径,更准备的说,就是有条件的执行语句。

    if语句的条件必须放在if后面的圆括号内,条件的求值结果永远是一个布尔值它是必须的。花括号中的语句不管是有多少条,只有在条件为true时才会执行。花括号不为必须,如果花括号内只有一条语句,可以省略,但为了提高代码的可读性,所以不建议省略。

    a. if语句:它是最简单的条件语句;

    b. if...else语句:

      if语句的第二种形式引入了else从句,当expression的值是false时,执行statement2;

      当在if/else语句中嵌套使用if语句时,要注意确保else语句匹配正确的if语句。javascript中if/else的匹配规则是:else总是和就近的if语句进行匹配 

    c. else...if语句:

      当代码有多条分支的时候用到这个语句,它并不是真正的javascript语句,它是多条if...else...语句连在一起时的一种写法

<script>
        //1、如果  只有一种情况要处理
        if (expression) {
            statement;
        }

        //2、否则 有两种情况要处理
        if (expression) {
            statement1;
        } else {
            statement2;
        }

        //3、否则如果 有多种情况要处理
        if (expression) {
            statement1;
        } else if (expression2) {
            statement2;
        } else if (expression3) {
            statement3;
        } else {
            statement4;
        }

        //4、和上面的3同等
        if (expression) {
            statement1
        } else {
            if (expression2) {
                statement2;
            } else {
                if (expression3) {
                    statement3;
                } else {
                    statement4;
                }
            }
        }

    </script>

  例子:点击按钮时让div在显示于隐藏之间来回切换

<!DOCTYPE html>
<head>
    <title>Document</title>
    <style>
        div {height: 200px;width: 200px;background-color: red; display: -none;}
    </style>
</head>
<body>
    <input type="button" id="btn" value="按钮">
    <div id="box"></div>
    <script>
        let btn = document.getElementById('btn');
        let box = document.getElementById('box');
        // style它操作的是行间样式
        let on = 'block';
        btn.onclick = function () {
            if (on == 'none') {
                box.style.display = 'block';
                on = 'block';
            } else {
                box.style.display = 'none';
                on = 'none';
            }
        }
    </script>
</body>
</html>

  案例:点击按钮,让图片切换

<!DOCTYPE html>
<head>
    <title>Document</title>
</head>
<body>
    <script>
        window.onload=function(){
            let prev=document.getElementById('prev');
            let next=document.getElementById('next');
            let pic=document.getElementById('pic');
            let imgArr=['A','B','C','D'];
            let n=0;
            next.onclick=function(){
                n++;
                if(n>imgArr.length-1){  //数组的length属性
                    n=0;
                }
                 // 字符串的拼接
                pic.src="images/"+imgArr[n]+".jpg";
            }

            prev.onclick=function(){
                n--;
                if(n<0){
                    n=imgArr.length-1;
                }
                pic.src="images/"+imgArr[n]+".jpg";
            }
        }
    </script>
    <input type="button" id="prev" value="上一张">
    <input type="button" id="next" value="下一张">
    <img src="images/A.jpg"  id='pic' style="display: block;">
</body>
</html>

  2、switch语句

    当所有的分支都依赖于同一个表达式的值时,可以用到switch语句。

    switch语句执行一个多路分支,首先计算expression的值,然后进行查找case子句的表达式是否和expression的值相同。如找到匹配的cse,那么将执行这个case相对应的代码块,如果找不到匹配的case,那它将会执行default标签中的代码块,如果没有default标签,switch语句将跳过它的所有代码块。

    每一个case语句块的结尾要使用关键字break或者是return,不然switch语句就会从与expression的值相匹配的case标签处的代码块开始执行,依次执行后续的语句,一直到整个switch代码块结束。(不会跳出switch语句)

    在switch语句中使用任何数据类型,且每个case的值不一定是常量,可以是变量或表达式。

    在使用switch语句中,要注意以下向点:

    a.由于每次执行switch语句时,并不是所有的case表达式都能够执行到,所以要避免使用带有副作用的case表达式,最安全的做法是在case表达式中使用常量表达式。

    b.default标签一般出现在末尾(特殊情况也可以在switch语句中的任何位置)

    c.switch语句中,对每个case的匹配操作实际上是“===”恒等运算符比较而不是“==”相等运算符比较,因此表达式和case的匹配不会做任何类型转换

<script>
    switch (expression) {
        case value1:
            //当expression与value1相同时,才会走这里的代码
            statement1;
            //停止以下代码继续执行
            break;
        case value2:
            //当expression与value2相同时,才会走这里的代码
            statement2;
            //停止以下代码继续执行
            break;
        case value3:
            //当expression与value3相同时,才会走这里的代码
            statement3;
            //停止以下代码继续执行
            break;
        default: statement4;
    }
</script>

  二、循环语句

    javascript有4种循环语句:while、do...while、for、for...in.只要给定条件仍能得到满足,包含在循环语句里的代码就将重复地执行下去。一旦给定条件的求值结果不再是true,循环也就到此为止。其中最常用的循环就是对数组元素的遍历.

    1、while语句

    while语句属于前测试循环语句,在循环体内的代码被执行之前,就会对条件进行判断。

    当表达式expression为true时则循环执行statement,直到expression的值为false为止;如果是false,那么程序将跳过循环。

    注意:当while条件不具备停止条件的时候,一定要在循环体内给一个条件变化,否则就是一个死循环

    while和for的区别:while循环是一个条件循环,它一般用在有嵌套的元素或者是有嵌套的数据。要做循环的时候首先考虑的是for,如果for做不出来那就用while。

    <script>
        /*while (expression) {
            statement;
        }

        let n = 0;
        while (n <= 10) {
            console.log(n);
            n++;
        }*/
        
        window.onload = function () {
            let box = document.getElementById('box');
            while (box.children.length != 0) {
                box = box.children[0];
            }
            console.log(box)
        }
    </script>
    <div id="box">
        <ul>
            <li>
                <p>
                    <a href="#">测试文字</a>
                </p>
            </li>
        </ul>
    </div>

  2、do...while循环

    do while语句是后测试循环,条件在执行循环内部的代码之后计算。这意味着在计算表达式之前,至少会执行循环主体一次。

    do...while循环和普通的while循环有以下的不同

    a.do...while循环要求必须使用关键字do来标识循环的开始,用while来标识循环的结尾并进入判断

    b.do...while循环用分号结尾

    <script>
        function printArray(a) {
            let len = a.length, i = 0;
            if (len == 0) {
                console.log('empty');
            } else {
                do {
                    console.log(a[i]);
                } while (++i < len);
            }
        }
    </script>

  3、for语句

    for语句提供一个比while语句更加方便的循环控制结构,用for循环来重复执行一些代码的好处是循环结构更加清晰。

    大部分的for都具有特定的计数器变量,计算器的三个关键操作是:条件初始化,条件判断,条件变化。for语句将这三步明确为循环语法的一部分,各自使用一个表达式来表示。

    在for循环的变量初始化表达式中,也可 以不使用var关键字,变量的初始化可以在外部执行

    由于ECMAScript中不存在块级作用域,因此在循环内部定义的变量也可以在外部访问到。

    for循环常见用途是对某个数组里的全部元素进行遍历处理。如果循环中的一次迭代会改变多个变量,需要用逗号运算符,它将初始化表达式和自增表达式合并入一个表达式中以用于for循环。

    for嵌套:有嵌套的循环,如果里面的循环没有走完,外面的循环步骤是不会走的。需要注意的是:里面的变量不要与外面的变量相同,如果相同的话,里面的变量会把外面的变量给覆盖掉。

  示例:点击某个li,让点击的那个li背景变成红色

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Document</title>
</head>
<body>
    <!--  for(条件初始化;条件判断,条件变化){
            当条件判断成立的时候,会重复执行这里的代码
          }
        步骤:
         1、条件初始化
         2、条件判断
         3、当条件成立的时候,走花括号里的代码
         4、条件变化
         从第二次开始,就不走1了,重复2,3,4 -->
    <script>
        window.onload = function () {
            let lis = document.querySelectorAll('li');
            for (let i = 0; i < lis.length; i++) {
                lis[i].onclick = function () {
                    //在循环的时候,给每个元素都添加了点击事件,想要在点击事件里找到点击的那个对象,不能用i的值作为下标去取,要用this,this就是点击的那个对象
                    this.style.background = 'red';
                }
            }
        }
    </script>
    <li>pink</li>
    <li>green</li>
    <li>yellow</li>
    <li>white</li>
    <li>blue</li>
</body>
</html>

  示例:选项卡

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">
    <title>html&css部分</title>
    <style>
        div {
            width: 200px; height: 200px;border: 1px dotted #f00;display: none;}
    </style> 
</head>
<body>
    <input type="button" value="选项一" style="background:red;" />
    <input type="button" value="选项二" />
    <input type="button" value="选项三" />
    <div style="display:block;">内容一</div>
    <div>内容二</div>
    <div>内容三</div>
</body>
</html>

  javascript部分(方法一)

<script>  
     //  需求:点击按钮显示对应的div,让其它的按钮背景颜色去掉,让其它的div隐藏    
    window.onload = function () {
        let inputs = document.querySelectorAll('input');
        let divs = document.querySelectorAll('div');
        for (var i = 0; i < inputs.length; i++) {
            inputs[i].index = i;
            inputs[i].onclick = function () {
                //点击的时候把背景颜色清空,所有的div隐藏,
                //因为操作的是一组元素所以有for循环
                for (var i = 0; i < inputs.length; i++) {
                    inputs[i].style.background = '';
                    divs[i].style.display = 'none';
                }
                //给当前的按钮添加背景颜色,让对应的div显示
                this.style.background = 'red';
                divs[this.index].style.display = 'block';
            }
        }
    }
</script>

  javascript部分(方法二)

<script>
    // 关键点:如何找到上一个点击的input
    window.onload = function () {
        var inputs = document.querySelectorAll('input');
        var divs = document.querySelectorAll('div');
        var last = inputs[0];//这个变量存的是上一次点击的对象,一上来默认为第0个
        for (var i = 0; i < inputs.length; i++) {          
            inputs[i].index = i;//给每个按钮添加一个自定义属性,存的是它们对应的索引值        
            inputs[i].onclick = function () {
                //把上一次点击对象的背景颜色去掉
                last.style.background = '';
                //把上一个对应的div让它隐藏
                divs[last.index].style.display = 'none';
                //给当前点击的那个按钮添加背景颜色
                this.style.background = 'red';
                //让当前点击的按钮对应的div让它显示
                divs[this.index].style.display = 'block';
                last = this;//把上一次点击的对象更新成当前点击的对象
            }
        }
    }
</script>

  4、for...in语句

    for...in语句也使用了for关键字,但它和for完全不一样。它可以用来更方便的遍历对象属性成员。

    variable 通常是一个变量名,也可以是一个可以产生左值的表达式或者是一个通过var语句声明的变量,总之必须是一个适用于赋值表达式左侧的值。object是一个表达式,这个表达式的计算结果是一个对象,同样,statement是一个语句或者是语句块,它是循环的主体。

    需要注意的是,只要for...in循环中的vaiable的值可以当做赋值表达式的左值,它可以是任意的表达式,每次循环都会计算这个表达式,也就是说每次循环它计算的值有可能不同。

    其它for...in循环不会遍历对象的所有属性,只有可枚举的属性才会遍历到。

    <script>
        /*for(var 变量名 in 对象){
            变量名          对象城的属性名(key)
            对象[属性名]    属性名对应的值
        }
       /要取到一个对象里的所有数据,用到for...in更加的快速方便
       for (variable in object) {
           statement;*/

        let person = {
            name: '老王',
            age: 20,
            height: '180cm',
            weight: '60kg'
        }
        for (var attr in person) {
            console.log(attr, person[attr]);
        }
    </script>

 三、跳转语句

    跳转语句要以让解释器跳转到程序的其它部分继续执行。分别为:break,return,continue.

   1、break语句

    单独break语句的作用是退出最内层的循环,停止循环下面的循环就不会走了,break后面的代码是不会执行的。它只有出现在循环语句或者是switch语句中才算是合法,出现在其他的语句中会报错。

  注意:break它的控制权都无法越过函数的边界。只能在函数内部使用。

    <script>
        {
            for (var i = 0; i < 5; i++) {
                if (i == 3) {
                    break;
                    // continue;
                }
                console.log(i);
            }
        }    
    </script> 

  2、return

    函数中的return语句就是指定函数调用后的返回值。让函数停止执行,它只能用在函数内。不然会报错。当执行到return语句时,函数终止执行,并返回expression的值给调用程序。

    如果没有return语句,则函数调用仅仅依次执行函数体内的每一条语句直到函数结束,最后返回调用程序。这种情况下,调用表达式的结果是undefined。return语句经常作为函数内的最后一条语句出现,但并不是说一定要放在函数最后,即使在执行return语句的时候还有很多后续代码没有执行到,这时函数也还是会返回调用程序。

    <script>
        function square(x) {
            return x * x
        };
        square(2);
    </script>

  3、continue

    停止循环,停止的是当次的循环,后面的循环还是会继续的。

    当执行到continue语句时,当前的循环逻辑就终止了,随即执行下一次循环。但在不同类型的循环中,continue行为也有所不同:

    a.while循环中,循环开始处指定的expression会重复检测,如果检测结果为true,则循环体会从头开始执行

    b.do while循环中,程序执行直接跳到循环结尾处,这时会重新判断循环条件,之后才会继续下一次循环

    c.for循环中,首先计算自增表达式,然后再次检测test表达式,用以判断是否执行循环体

    d.在for/in循环中,循环开始遍历下一个属性名,这个属性名赋给了指定的变量.

 

 

posted on 2019-11-12 17:36  人称小小贩  阅读(660)  评论(0编辑  收藏  举报