前端学习Day28

一、补充

1.js中的三大特殊数据undefinednullNaN

- `NaN`:非法的数值运算得到的结果

    - 特殊之处:

        1. 是一个数值型的数据,但是不是一个数字

        2. NaN不等于任何值,和任何数据都不相等,NaN不等于NaN

    - 检测方法:`isNaN(要检测的数据)`

        - true:检测结果为 NaN 或能转成 NaN

        - false:检测结果不是 NaN 或不能转成 NaN

- `undefined`是:未赋值,类型是undefined;`null`是:空,类型是object

    - 特殊1:undefined和null在关系运算符两边隐式类型转换后,得到了一致的数据

    - 特殊2:undefined被Number转成NaN,null被Number转成0

- 如何判断三大特殊的值,分别是谁

    - `NaN`可以使用`isNaN()`来判断

        - isNaN(要判断的值或变量);

        ```js

            var a = NaN;

            console.log(isNaN(a)); // 结果是布尔值:true为是的,false为不是

        ```

    - `undefined`可以使用`typeof`判断

        - typeof 要判断的值或变量

        ```js

            var b = undefined;

            console.log( (typeof b) === "undefined" );// 结果是布尔值:true为是的,false为不是

        ```

    - `null`需要配合`typeof`和关系运算符判断

        - typeof 要判断的值或变量 === "object"

        ```js

            var c = null;

            console.log( (typeof c) === "object" );

        ```

        - 还需要( && )

        - 要判断的值或变量 == null

        ```js

            console.log(c === null);

        ```

 

 

 二、逻辑分支(选择结构,分支结构)

 

1. 程序的三大结构

顺序结构

代码逐行执行,一行一行自上而下执行

分支结构

如果...否则...

循环结构

重复执行多次

 

 

2.分支语句

- 分支和循环结构,需要配合一些专用代码才能实现,专用代码叫:语句

- `if`:单分支

    - `if(条件){执行语句}`

 

- `if else`:双分支

    - `if(条件){条件为true时,要执行的语句}else{条件为false时,要执行的语句}`

    - 分支的嵌套(双分支模拟的多分支)

        - 在执行体内,可以继续写其他分支

        - `if(条件1){}else if(条件2){}else if(条件3){}else......`

 

if的小括号里面也会发生隐式类型转换规则

    - 规则:其他转布尔

        - 数值转布尔:非0为true,0为false

        - 字符转布尔:非空字符,为true,空字符,为false

        - 对象转布尔:对象为true

        - 数组转布尔:数组为true

        - 函数转布尔:函数为true

        - 特殊数据转布尔:undefined,NaN,null都为false

 

- `switch`:多分支

    - 语法:

        ```js

        var n = 2;

        var msg = "";

        switch(Number(n)){

            case 0:

                msg = "星期日";

                break;

            case 1:

                msg = "星期一";

                break;

            ...

            default:

                msg = "你输入的数字不对,请输入0~6之间的数字";

        }

        console.log(msg);

        ```

    - 规则:

        - 当要判断的值是固定的数据时,选择使用switch

            - 如果要判断的值是范围时,选择使用if-else

 

        - switch的case判断,不存在隐式类型转换

            - 某些情况下,需要根据场景,选择是否需要主动转换

 

        - 如果你不管上面的使用建议,非要使用switch判断范围,注定要多掉点头发

            - 使用switch判断范围

            ```js

            var cj = 45;

            switch( true ){

                case cj<60:

                    console.log("不及格");

                    break;

                case cj>=60 && cj<70:

                    console.log("及格");

                    break;

                default:

                    console.log("以上case都没执行");

            }

            ```

    - 某些问题需要利用switch的case的穿透特性,解决

        ...后话

你可能感兴趣的:(前端学习Day28)