JavaScript学习第3天(逻辑运算符)

逻辑运算符

比较运算符只能比较两个值,但是有时候我们需要进行多个数值的比较。 这个时候就需要用到逻辑运算符。

  • &&,逻辑与(并且),第一个操作数和第二个操作数都为true的时候返回true,否则返回false。

    • 逻辑运算符可以使用任何类型的操作数。如果操作数是布尔型直接比较,如果不是要进行Boolean()转换。
    • 如果第一个操作数是false(或经过Boolean()转换为false),那么返回的是第一个操作数。如果第一个操作数是true(或经过Boolean()转换为true),那么返回的是第二个操作数。
    • 如果第一个操作数能够决定结果(false或经过转换后为false),那就不对第二个操作数进行求值了,因为已经能够决定结果了。这就是所谓的短路
  • ||,逻辑或(或者),第一个操作数或第二个操作数为true时候返回true,否则返回false(两边都为false的时候才为false)。

    • 逻辑运算符可以使用任何类型的操作数。如果操作数是布尔型直接比较,如果不是要进行Boolean()转换。
    • 如果第一个操作数是true(或经过Boolean()转换为true),那么返回的是第一个操作数。如果第一个操作数是false(或经过Boolean()转换为false),那么返回的是第二个操作数。
    • 逻辑或也有短路操作,如果第一个操作数求值为true,就不会对第二个操作数求值了(因为第一个操作数已经能决定结果了)。
  • !,取反,用来取得指定布尔值取反的结果。(最终结果还是布尔值)

    • 如何操作数不是布尔型,会先将它转换为布尔值。

    • 可以使用!!(两次调用!)将变量转换为布尔值

      var a = 1;
      console.log(!!a);
      

三元运算符

  • 运算元:

    1 + 2,1和2分别代表运算元(操作数),+代表操作符。

  • 按照运算元来分类:

    • 一元运算符:!+-++--

    • 二元运算符:+-*/&&||

      • &&,逻辑与 and
      • ||,逻辑或 or
      • !,取反 not
    • 三元运算符:三元运算符只有一个。

      运算元1 ? 运算元2 : 运算元3;

      运算元1是条件,当运算1为true时返回运算元2,为flase时返回运算元3。

运算符优先级

简要:一元运算符通常优先级比较高,然后二元,最后三元。

运算符小口诀:一元、算数、关系、逻辑、三元、后赋值。

关联性:决定了拥有相同优先级的运算符的执行顺序。

a 操作符 b 操作符 c

  • 从左到右,那就相当于将左边的子表达式上加上小括号(a 操作符 b) 操作符 c
  • 从右到左,相当于a 操作符 (b 操作符 c)
var a = 1;
console.log(!(!a));//!!a

小括号:分组操作符、函数调用符。

流程控制

流程控制概述

  • 什么是流程控制?

    通过触发某种条件,导致我原本的流程发生了一些改变。

  • 流程控制的结构:

    • 顺序结构:(最基本的结构,程序从上往下执行)。
    • 分支结构:如果xxxxx 我就xxxxxx样。
    • 循环结构:重复做一组动作。

分支结构

分支结构就4种,不管程序多大、多复杂都是这几种情况。

  • 单一分支结构

    格式:

    if (条件表达式) {
        代码块1
    }
    

​ 如果条件表达式值为true则执行代码块1的代码,如果为false则忽略,不执行代码块1的代码。程序继续向下执行。

注意:

  1. 可以在括号中直接执行true或false,但是没有任何意义。
  2. 括号里面不是表达式,会将他的值通过Boolean进行转换,然后根据转换后的结果判断是否执行。
  3. 如果大括号内只有一条语句,可以省略大括号(不建议使用。)
  • 双向分支结构

    格式:

    if (条件表达式) {
        代码块1
    } else {
        代码块2
    }
    

    如果条件表达式的值为true则执行代码块1的代码,如果为false就执行代码块2的代码,执行完整个if语句之后就继续执行下面的代码。

    注意:

    1. 它有一个特点,必须执行if区间的代码或else区间的代码。
    2. 如果大括号内只有一条语句,可以省略大括号(不建议使用。)
  • 多向分支结构

    格式:

    if (条件表达式1) {
        代码段1
    } else if (条件表达式2) {
        代码段2
    } else if (条件表达式3) {
        代码段3
    } .....
    else {
    	都不成立时执行的代码段。
    }
    

    如果条件表达式1返回true就执行代码段1,条件表达式2执行就返回代码段2…如果条件都不成立时执行else里面的内容。

    注意:

    1. else可以省略。
    2. if条件从上往下执行,执行了一处大括号的代码之后其他的条件不会检查也不会执行。
    3. if语句__通常__用来判断范围条件。但是也能判断是否相等。
  • switch语句

    从本质上讲,它是为了让开发人员免于大量使用if(){....}else if()语句。

    格式:

    switch(有值的东西){
        case1:
            代码块1
        break;
        case2:
            代码块2
        break;
        ......
        case 值n:
            代码块n
        break;
        default:
            默认匹配的代码块
        break;
    }
    

    执行过程:

    1. 先确定switch中小括号的值是什么
    2. 用确定出来的值分别和case后面的值进行匹配(这里进行匹配是全等于匹配)
    3. 找到第一个能够匹配上的case之后,执行其中对应的代码块。
    4. 执行完这个代码块之后调用break退出switch语句。
    5. 如果一直到最后都没有找到匹配的内容,那么执行default中的语句。(相当于else)

    注意:

    1. switch语句在比较值时使用的是全等于,不会发生类型转换。
    2. default语句可以省略。
    3. break是否可以省略,可以。如果省略break就会导致执行完当前case之后继续执行下一个case(不管是否能够匹配上),遇到break为止。
    4. switch也可以用来进行某个条件的判断。但是我们通常用switch来进行某个值得精确匹配。
  • 巢状分支结构

    是将前面几种分支综合、嵌套使用。

    在分支结构中可以使用我们学过的任意的代码。

    我们写代码的时候一般情况下,嵌套不会超过3层,如果超过的话就得注意看看逻辑、代码是否有优化的地步。

循环结构

程序中有些代码需要反复执行多次,这个时候就用到了循环

  • while语句

    格式:

    while(条件表达式){
          代码块
    }
    

    第一步先执行条件表达式,表达式为true,执行循环中的代码块,然后再执行条件表达式看是否为true,如果为true就再执行循环中的代码,一直这样走,直到遇到条件表达式为false的情况。
    while循环的三个要素:

    1. while外部要有起始值
    2. while要有条件
    3. while内部始终要想办法将while中的条件改为false。

    案例:

    1. 打印1-100之间的整数。
    2. 打印1-100之间的偶数。
    3. 计算1到100的和。
    4. 计算1-100之间所有偶数的和
    5. 计算100的阶乘 100!(就是1*2*3...*100)

    注意:

    1. while循环里面可以写true,但是注意死循环。
    2. while循环通常用来做条件循环。
    3. 循环是可以相互嵌套的,实际应用当中嵌套不应该超过3层。
  • for循环

    格式:

    for (表达式1;表达式2;表达式3) {
        代码块;
    }
    

    表达式1用来做初始化条件

    表达式2用来做条件表达式

    表达式3通常用来做自增条件(结束条件)、自增或自减

    for (var num = 1; num <= 3 ;num++) {
        console.log(num);
    }
    
    1. 执行表达式1,num = 1
    2. 执行表达式2,判断条件是否成立1<=3,true
    3. 执行当前的代码块中的代码,打印num,1。
    4. 执行表达式3,进行自增。执行完之后num=2
    5. 再执行表达式2判断条件是否成立2<=3,true。
    6. 执行当前的代码块中的代码,打印num,2
    7. 再执行表达式3进行自增,执行完成后num=3
    8. 再执行表达式2,判断条件是否成立3<=3,true。
    9. 打印当前的代码块中的代码,打印num,3
    10. 执行表达式3进行自增,num=4
    11. 4<=3,表达式2,false。
    12. 终止循环执行。

    表达式1只执行了一次。

    for循环通常用来做计数循环。

​ for循环也是可以嵌套的。

  • do...while循环

    不常用。

    do{
        要循环执行的代码。
    }while(条件表达式);
    

    第一步先执行do中的语句,然后检查条件表达式是否成立,如果成立true则继续执行do内的代码。

    不管怎么样do…while循环都会最少执行一次。

特殊的流程控制语句

  • break:

    • 作用1:在switch中使用break跳出当前的switch语句。
    • 作用2:在循环中使用,跳出离他最近的一层循环,break下面的代码不执行了。
  • continue:

    结束本次循环,调用continute之后本次循环剩下的代码不执行了,直接进入到下次循环。

案例:

  • 输出1~100的质数(一个数,如果只有1和它本身两个因数,这个数就是质数。但是1不是质数。) 重要

  • 求100~999之间的 百位数的三次方+十位数的三次方+个位数的三次方 正好等于这个数的数值。abc = a^3 + b^3 + c^3

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值
>