数据转换与算法中分支结构

  • 逻辑运算

逻辑运算一般用于判断多关系运算,得出最后结果。

运算符 描述
&&(逻辑于) 左右两边都为true,最后结果才为true,否则就是false
|(逻辑或) 左右两边只要有一个true,最后结果就为true,否则就是false
!(逻辑非) 将true处理为false,将false处理为true

逻辑与(&&)的运算方法

  • 只要“&&”前面是false,无论“&&”后面是true还是false,结果都将返“&&”前面的值;
  • 只要“&&”前面是true,无论“&&”后面是true还是false,结果都将返“&&”后面的值;

逻辑或(||)的运算方法

  • 只要“||”前面为false,不管“||”后面是true还是false,都返回“||”后面的值。
  • 只要“||”前面为true,不管“||”后面是true还是false,都返回“||”前面的值。

<div style="color:red;font-size:18px;font-weight:600" >在JS逻辑运算中,0、""、null、false、undefined、NaN都会判为false,其他都为true。</div>

类型转换

强制转换

1.转换布尔型

语法:
Boolean(arg)
  • 非0数字转换为布尔型为true,0转换为布尔型为false
  • 非空字符串转换为布尔型为true,空字符串转换为布尔型为false
  • undefined转换为布尔型为false
  • null转换为布尔型为false

2.转换为字符串

语法:
String(arg)
  • true转换为字符串依然为true,false转换为字符串仍为false
  • null转化为字符串仍为null
  • undefind转换为字符串仍为undefind

3.转换为数字

语法:
Number(arg)
  • NaN不代表数字,但它是数字类型
  • 非数字字符串转换后都是NaN(NaN是一个不是数字的数字类型)
  • true转为数字为1,false转为数字为0
  • undefined转换为数字为NaN
  • null转化为数字为0

4.使用函数强制转换为数字

语法:
    parseInt(arg)//强制转换为整数
    parseFloat(arg)//强制转换为小数
  • 小数转换为整数只取整数,向下取整
  • 首位非数字的字符串强转为整数为NaN,首位是数字的字符串强转为整数是首位的数字
  • 布尔型强转为数字为NaN
  • undefined强转为数字为NaN
  • null强转为数字为NaN

5.使用toString()方法强制转换为字符串。转换结果和String()函数一样。

    var a = 12345;
    var b = true;
    var c = a.toString();
    var d = b.toString();
    console.log(c);
    console.log(typeof c)
    console.log(d);
    console.log(typeof d);

<div style="color:red">注意:这个方法不能给undefined和null使用</div>

隐式转换(自动类型装换)

在js中,运算符在运算时,若两边数据不统一,编译器会自动将运算符两边的数据进行数据类型转换。这个过程有编译器自动转换的方式就称为隐式转换。

1.在数学运算时转换为数字型

2.比较运算时:

  • 如果两个值都是字符串,则进行比较编码值
  • 如果有一个值为数字或布尔型,则转换为数字进行比较
  • 字符串进行比较的时候首字符进行比较,相等在进行后面的字符比较。

常见误区

  • 字符串连接符与算术运算符隐式转换规则混淆
/*此类问题的坑:将字符串连接符(+:只要+两边有一边是字符串)与算术运算符(+:两边都是数字)的隐式转换搞混淆
1.字符串连接+:会把其他数据类型调用String()方法转成字符串然后拼接
2.算术运算符+:会把其他数据类型调用Number()方法转成数字然后做加法计算
*/
    //+是字符串连接符:String(1)+'true'
    console.log(1+"true");//1true
    //+是算术运算符:1+Number(true)=1+1=2
    console.log(1+true);//2
    //+是算术运算符1+Number(undefined)=1+NaN=NaN
    console.log(1+undefined);//NaN
    //+是算术运算符:1+Namber(null)=1+0=1
    console.log(1+null);//1
  • 关系运算符会把其他数据类型转换成number之后再比较关系
/*当关系运算符两边有一边是字符串的时候,会将其他数据类型使用Numder()转换,然后比较关系
    console.log("2">10);//false Number("2")>10=2>10=false
当关系运算符两边都是字符串的时候,此时同时转成number然后比较关系
重点:此时并不是按照Number()的形式转成数字,而是按照字符串对应的unicode编码来转成数字(使用charCodeAt(字符下标,默认为0)这个方法可以查看字符的unicode编码)
    console.log("2">"10");//true    '2'.charCodeAt()>'10'charCodeAt()=50>49=true

*/
    console.log("2">10);//false
    console.log("2">"10");//true
    //多个字符从左往右依次比较
    console.log("abc">"b");//false  先比较'a'和'b','a'与'b'不等,则直接得出结果
    console.log("abc">"aad");//true 先比较'a'和'a',两者相等,继续比较第二个字符'b'与'a',得出结果
    console.log(NaN==NaN);//false 特殊情况(无视规则):NaN与任何数据比较都是NaN
    console.log(undefined==null);//true  特殊情况(无视规则):如果数据类型是undefined与null得出固定结果 
    console.log(undefined==undefined);//true
    console.log(null==null)//true
  • 逻辑非隐式转换与关系运算符隐式转换搞混淆
    o 空数组的toString()方法会得到空字符串,而空对象的toString()方法会得到字符串[object Object] (注意第一个小写o,第二个大写O哟)
/*1.关系运算符:将其他数据类型转成数字
    2.逻辑非:将其他数据类型使用Boolean()转成布尔类型
    * 以下八种情况转换为布尔类型会得到false(0、-0、NaN、undefined、null、""、false、document.all())除此之外的所有数据得到true.
*/
    console.log([]==0);//true
    console.log(![]==0);//true
    console.log([]==![]);//true
    console.log([]==[]);//false
    console.log({}==!{});//false
    console.log({}=={});//false

算法

程序=数据结构+算法
任何复杂的算法都有以下几种结构:

1.顺序结构

2.分支选择结构

3.循环结构

1.分支结构(满足不同的条件执行不同的程序)
if分支

    if(条件){
        当条件为true时执行的语句
    }

if...else...分支

    if(条件){
        当条件为true时执行的语句
    }else{
        当条件为false时执行的语句
    }

if()...else if()...else分支

    if(条件1){
        当满足条件1时执行的语句
    }else if(条件2){
        当满足条件2时执行的语句
    }else if(条件3){
        当满足条件3时执行的语句
    }else{
        以上条件都不满足时执行的语句
    }

switch-case 语句

    switch(变量/表达式){
        case 值1:
        执行语句1;
            break;
        case 值2:
        执行语句2;
            break;
        ...
        default:
        变量与case不符时执行的语句;
            break;
    }

2.循环结构(重复执行相同或相似的代码)

三要素:
1.循环变量
2.循环条件(满足时才执行循环体)
3.循环变量的变化(变化是趋向于条件的不满足,趋向于循环的结束)

while循环

    while(条件){
        循环体
    }
/*流程:
1.判断循环条件
2.循环条件为true,执行循环体。再判断条件,如果条件为真,执行循环操作...
3.循环条件为false,则结束循环操作*/

do while循环

    do{
        循环体
    }while(条件)
    /*流程:
    1.先执行循环体
    2.
    */

for循环

    for(表达式1;表达式2;表达式3){
        循环体
    }
    /*
    表达式1:声明循环变量 可以省略 循环变量需要在循环开始之前申明好
    表达式2:循环条件的判断 可以省略 在循环体中添加结束循环的判断,否则就会形成死循环
    表达式3:更新循环变量 可以省略 在循环体中添加循环变量的更新语句
    三个表达式可以省略,但是不能省略分号(;)
    流程:
    1.执行表达式1 声明循环变量
    2.判断循环条件是否成立 成立则执行循环体
    3.执行表达式3,更新循环变量
    4执行表达式2 判断循环条件是否成立 成立则执行循环体。若表达式2执行的结果为false 则终止循环
    */
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。