运算符:运算;有运算,就有结果; 所以以下所有运算符,都有返回值

算术运算符

数学运算符也叫算术运算符,主要包括加、减、乘、除、取余(求模)。
+:求和
-:求差
*:求积
/:求商
%:取模(取余数): 5 % 2 // 1; 5减掉能被2整除的部分,剩余的数 1
2%5 余数2,因为不够除,所以原数剩余2
开发中经常作为某个数字是否被整除,判断当前值是奇数还是偶数

注意点:

🔥当字符串与数字相加时,数字转换为string类型,起到一个拼接的作用;
🔥当相减时,字符串则转换为number类型,即数字相加减。

优先级

  • 同时使用多个运算符编写程序时,会按着某种顺序先后执行,我们称为优先级。
    JavaScript中 优先级越高越先被执行,优先级相同时以书从左向右执行。
    1. 乘、除、取余优先级相同
      加、减优先级相同
    2. 乘、除、取余优先级大于加、减
    3. 使用 () 可以提升优先级
      总结: 先乘除后加减,有括号先算括号里面的

      赋值运算符

      赋值运算符:对变量进行赋值的运算符
      🌈= 将等号右边的值赋予给左边, 要求左边必须是一个变量
      1. += 示例:num = num +10
      2. 简化 num +=10
      3. *= 同上
      4. /= 同上
      5. %= 同上

      一元运算符

      n元运算符定义:根据运算符需要用到的n个操作数
      一元运算符做自增运算,只需要1个操作数
      操作数:可以操作的数据;数字和变量都是操作数
      自增或者自减单独写没有区别,但以后都参与运算有区别

      自增/自减:

      符号:++/—
      作用:每执行1次,当前变量的值 +1;作用相当于 变量 +=1
      🌈💥💥💥

      前置自增:先自增后运算

      1. 形式:++num

      后置自增:先运算后自增

      1. 形式:num++
      例子:
      1. <!DOCTYPE html>
      2. <html lang="en">
      3. <head>
      4. <meta charset="UTF-8" />
      5. <meta http-equiv="X-UA-Compatible" content="IE=edge" />
      6. <meta name="viewport" content="width=device-width, initial-scale=1.0" />
      7. <title>Document</title>
      8. </head>
      9. <body>
      10. <script>
      11. let num = 1;
      12. // 前置自增: 先自增,再返回自增结果(会修改num的值); 然后再继续计算
      13. console.log(++num) //2
      14. console.log(num) //2
      15. // 后置自增: 先返回变量的值;然后再自增(会修改num的值); 再根据返回的值继续计算;
      16. console.log( num++) //2
      17. console.log(num) //3
      18. // 重置一下
      19. // 总结:前置和后置自增有没有区别,取决于他们的返回值,有没有被使用
      20. // 前置自减 后置自减
      21. // 作用: -1
      22. // 特性和自增一模一样
      23. // num++2报错
      24. // num++++报错
      25. // 1++ 错误
      26. </script>
      27. </body>
      28. </html>

🔥🔥🔥运算过程:

  1. <script>
  2. let i = 1
  3. console.log(i++ + ++i + i);
  4. // 7返回值 1 + 3 + 3
  5. i后自加=2 i自加=3
  6. 临时变量存储1
  7. 从左往右依次进行,后置自加不用等整体算完再进行,不要跳过了🔥🔥🔥
  8. </script>

自减:
符号:—
作用:让变量的值 -1

注意事项:

  1. 只能 +1;
  2. 有返回值; 运算符就是用来运算并得出运算结果的;
  3. 前置和后置自增有没有区别,取决于他们的返回值,有没有被使用

    使用场景:
    1. 经常用于计数来使用。比如进行10次操作,用它来计算进行了多少次了,用来记录循环到第几次了

    比较运算符

    💥💥💥比较比的都是number类型的,返回值为 boolean类型,true或者false

    >:   左边是否大于右边,比较数值大小
    <:   左边是否小于右边,比较数值大小
    >=:  左边是否大于或等于右边,比较数值大小
    <=:  左边是否小于或等于右边,比较数值大小
    ==:  左右两边是否相等,将两边的数据进行转换为数值,比较数值大小
    ===: 左右两边是否 **类型** 和 **值大小** 都相等
    !=:  不等于,比较数值
    !==: 左右两边是否不全等,比较数值和类型
    比较结果为boolean类型,即只会得到true或false
    <script>
    //比较数值大小
     console.log(4 > 4)  //false
     console.log(4 < 4)  //false
     console.log(4 >= 4) //true
     console.log(4 <= 4) //true
    
     // == 等于: 只比较 值的大小
     console.log(4 == 4) //true
    
     // != 不等于:只比较 值的大小
     console.log(4 != 4) //false
    
     // 比较数据类型和大小
    
     // === 全等: 比较 值的大小 和 类型
     console.log(4 === 4) //true
     console.log(4 === '4')//fasle
    
     // !== 不全等:比较 值的大小 和 类型
     console.log(4 !== 4) //false
     console.log(4 !== '4')//true
    </script>
    

    注意细节:

  4. 比较字符串,依靠ASCII码转化成数值,进行比较,先比较第一位;

  • 一般数字和字母大的,ASCII编号也大
  • 例如”2”>”19” 返回值true

     a的ASCII码为97
    
  1. NaN不等于任何值,包括自身,都返回falses ```javascript
  2. // 尽量不要比较(计算)小数; 小数有精度问题 // 0.1+0.2=0.30000000000004 有小数点后的零零精度 console.log(0.1 + 0.2 === 0.3);//false // 小数在内存中存储方式,会导致精度问题 // 前端进行计算的时候,使用 计算函数库(别人帮我们写好了的一系列,用于计算的方法) ```
    不同类型之间比较会发生隐式转换,最终把数据隐式转换转成number类型再比较
    所以开发中,如果进行准确的比较我们更喜欢 === 或者 !==

    逻辑运算符

    用来解决多重条件判断
    特点非返回值
    && 逻辑与 并且 符号两边为true,结果为true ; 一假为假false,
    直接返回后面的运行结果
    || 逻辑或 或者 有一个为true就为true,一真全真,全假则假
    ! 逻辑非 取反 true变false;false变true ; 真变假,假变真

    短路运算:

    🔥只存在于 && 和 || 中,当满足一定条件,右边代码不执行(短路)
    返回值:无论 && 还是 || ,返回值都是最后被执行的表达式值
    一般用在变量赋值(取默认值)

    执行+返回值

    && 和 左边为假,右边(短路)不算,总体为假,返回左边值;
    左边为真,直接返回右边的值
    1652618095616.png
    || 或 左边为真,右边(短路)不算,总体为真,返回左边值;
    左边为假,依次执行右边,直到最后为真,返回右边值
    全假返回,最后运算的假值
    JS运算符 while循环 - 图3

    扩展🔥

    true 转化为数字 1
    false转换为数字0
    隐式转换:
        true ==》 1            false ==》 0<br />              0 ==》 false             1 ==》 true
    
    💥逻辑上为真的值有:
    true 非0数字(包括负数) 非空字符串 {}对象 []数组
    💥逻辑上为假的值有:
    false 0 ‘’ 空字符串 undefined null 还有NaN
    JS运算符 while循环 - 图4
    1652694973583.png

    运算符优先级

  • 逻辑与比逻辑或优先级高
  • 优先级不等于计算机运行顺序
  • 解析顺序不等于运行顺序(可参考短路运算)
  • JS运算符 while循环 - 图6

JS运算符 while循环 - 图7

表达式

表达式通常会在原地返回一个值; 代码较短

语句

js 整句或命令,用来描述一件事情,代码量比较长
比如: if判断语句 循环语句
语句可以有返回值,但是语句关注点是在做一件事情;

区别

语句 包含 表达式;
但是表达式不等于语句:因为表达式一定有返回值,关注点是值,不是一件事情 ;

程序三大流程控制语句

🌈js整体执行顺序,从上到下,从左到右;这种叫顺序结构;
🔥有的时候要根据条件选择执行代码,这种就叫分支结构
🌈某段代码被重复执行,就叫循环结构

分支语句

if语句

三种使用:单分支、双分支、多分支
单分支: 双分支: 多分支:

JS运算符 while循环 - 图8

🔥条件=表达式: 返回Boolean型 true / false
💥当括号里的条件为true时,进入大括号里执行代码
🔥🔥🔥小括号内的结果若不是布尔类型时,会发生隐式转换转为布尔类型

🎃当处理的代码只有一句,那么也可以省略{},意味着如果没有添加{},
if结构只会影响后面一句;  ;代表语句结束了,执行下一句
let num = prompt("请输入数字")
if(num >=60) alert('及格了');console.log(123); 满足条件,弹出及格,打印出123
不满足,打印出123
if(num >=60); alert('及格了');console.log(123);
  分号代表语句已经结束,后面依次运行出来,及格了,123

⚡多分支中的 else if条件可以写多个(N)
🌈双分支代码理解:

用户输入年份,判断是闰年还是平年输出;
(能被4整除但不能被100整除,或者被400整除的年份是闰年,否则都是平年)
  let year = prompt("请输入年份")
    let res1 = year % 4 === 0 && year % 100 !== 0
    let res2 = year % 400 === 0
    if (res1 || res2) {
      alert("闰年")
    } else {
      alert("平年")
    }

🌈多分支代码理解:

<script>
    // 多分支语句
    // if(表达式){..}else if(表达式){...}else .......
    // 需求: 根据输入不同时间,输出不同的问候语
    let time = prompt("请输入时间")
    if (time < 12) {
      alert("上午好")
    } else if (time < 18) {
      alert("下午好")
    } else if (time < 20) {
      alert("晚上好")
    } else {
      alert("开始hi")
    }
  </script>

switch多分语法

  1. 分支结构,主流是 if else 结构, switch 也属于分支结构
  2. 适用场景: case 特别多的时候; 会比 if 看上去更简洁;但if用的更多
  3. switch 语句计算每个表达式。随后表达式的值会与结构中的每个 case 的值做比较。如果存在匹配,则与该 case 关联的代码块会被执行。
  4. 可选的 break 语句确保程序立即从相关的 case 子句中跳出 switch 并接着执行 switch 之后的语句。若 break 被省略,程序会继续执行 switch 语句中的下一条语句。
  5. 忘记添加 break,那么代码将会从值所匹配的 case 语句开始运行(case穿透),然后持续执行下一个 case 语句而不论值是否匹配。
  6. default 放到其它 case 之上,它仍有效。

    语法书写:
    switch(表达式) {     表达式只计算一次,然后和case的值进行比较
    case n:
        代码块
        break;
    case n:
        代码块
        break;
    default:
        默认代码块
    }
    

    JS运算符 while循环 - 图9

    三元运算符🎃

    符号:? 与 : 配合使用

    语法:

    条件?满足条件执行的代码 : 不满足条件执行的代码
    表达式:有返回值;所以可以用来取值
    适用场景: 双分支时使用,更加简洁
    相当于: if(条件){ 满足条件执行的代码 } else { 不满足条件执行的代码 }
    模板字符串里可以直接写三元运算符表达式🔥🔥🔥
    1652702096682.png

    扩展:

    🔥条件?满足条件执行的代码 : 不满足条件执行的代码(加括号,可以无限嵌套 ? :)

    例子:

    JS运算符 while循环 - 图11

    数字补零案例,例如时钟上的两位数显示
    <script>
    let num = prompt("请输入一个数字")
    注意使用  模板字符串🎑💥
    let result = num < 10 ? `0${num}` : num
    document.write(result)
    </script>
    
    简单计算器
    <script>
            + 使用变成 数字类型
    let num1 = +prompt("请输入一个数字")
    let num2 = +prompt("请输入一个数字")
    let symbel = prompt("请输入+-*/之一")
    debugger
    if (symbel === "+") {
      alert(num1 + num2)
    } else if (symbel === "-") {
      alert(num1 - num2)
    } else if (symbel === "*") {
      alert(num1 * num2)
    } else if (symbel === "/") {
      alert(num1 / num2)
    } else {
      alert("犯规了")
    }
    </script>
    

    循环结构

    断点调试

    🔥🔥🔥debugger 调试断点,多用很重要
    进入debugger的条件:

  7. 网页打开了开发者工具

  8. js代码运行到了 断点 位置
  9. 断点可以有两种设置方式
    1. 在代码中主动写上 debugger,放在循环里面
    2. 在开发者工具 Sources 选项卡,点击序号
      断点:在某句代码上加的标记就叫断点,当程序执行到这句有标记的代码时会暂停下来

过程演示:
JS运算符 while循环 - 图12

  • 在Sources选项卡,Scope栏,可以看到当前执行环境(作用域),声明的变量实时的值;
  • 选择代码行号,相当与选择断点暂停;运行代码,到断点会停,过程可看Scope,箭头可操作
  • 鼠标选中某部分代码,再把鼠标移动到 这部分代码身上; 相当于 执行了一下这部分代码,并且可以看到执行结果(有风险!因为相当于我们人为在代码中,插入了一段代码!)

    while循环语法

    语法:

    while (循环条件) {
    要重复执行的代码(循环体)
    }

    一般循环三要素

    循环的本质就是以某个变量为起始值,然后不断产生变化量,慢慢靠近终止条件的过程。
    JS运算符 while循环 - 图13
    🌈while关注点是循环条件: while(条件){…}

    循环流程:

  1. 跟if语句很像,都要满足小括号里的条件为true才会进入执行代码
  2. 🔥while大括号里代码执行完毕后不会跳出,而是继续回到小括号里判断条件是否满足;

    🌈若满足又执行大括号里的代码,然后再回到小括号判断条件,直到括号内条件不满足,即跳出🔥
    

    代码解析:

    <script>
    // 页面输出1-100
     // let time = 1;
     // while (time <= 100) {
     //   document.write(time + "<br>")
     //   time++
     // }
     // 计算从1加到100的总和并输出
     let score = 1
     let total = 0
     while (score <= 100) {
       total += score
       score++
     }
     document.write(total)
     // 计算1-100之间的所有偶数和
     let num1 = 0
     let num2 = 1
     while (num2 <= 100) {
       if (num2 % 2 === 0) {
         num1 += num2
       }
       num2++
     }
     console.log('num1: ', num1)
    </script>
    

    退出循环

    在循环体内,使用
    continue: 退出当前(本次)循环
    break: 退出整个循环