学习笔记整理-JS-03-表达式和运算符

[[toc]]

一、表达式和运算符

1. 表达式

  • 表达式种类
    • 算术、关系、逻辑、赋值、综合

二、JS基本表达式

1. 算术运算符

意义 运算符
+
-
*
/
取余 %
  • 加减乘除

    • 加减的符号和数学一致,乘号是*号,除法是/
    • 默认情况,乘除法的优先级高于加法和减法;必要时可以使用圆括号来改变运算的顺序。
  • 加号的两种作用

    • 加号有"加法"和"连字符"两种作用
    • 如果加号两边的操作数都是数字,则为"加法",否则为连字符。
  • 取余运算

    • 取余运算也叫作"求模运算",用百分号%表示

    • a%b表示求a除以b的余数,它不关心整数部分,只关心余数

      js 复制代码
          11 % 4;   //3, 因为11除以4余数是3
          20 % 6;   //2, 因为20除以6余数是2
          12 % 3;   //O, 因为能够整除,余数是0
          3 % 9;    //3, 因为商0,余数是3  
  • 隐式类型转换

    • 如果参与数学运算的某操作数不是数字型,那么JavaScript会自动将此操作数转换为数字型

      js 复制代码
        3 * '4' // 12
    • 隐式转换的本质是内部调用Number()函数

      js 复制代码
      Number(true)// ---> 1  true + true // 2
      Number(false)//---> 0  false + 2   // 2
      3 * '2天'                          // NaN    
  • 有关IEEE754

    • JavaScript中,有些小数的数学运算不是很精准

      js 复制代码
      0.1 + 0.2 // 0.30000000000000004
    • JavaScript使用了IEEE754二进制浮点数算术标准,这会使一些个别的小数运算产生丢失精度问题

      • 解决办法:在进行小数运算时,要调用数字的toFixed()方法保留指定的小数位数
  • 幂和开根号

    • JavaScript中没有提供幂计算、开根号的运算符。需要使用Math对象的相关方法进行计算。

      js 复制代码
        Math.pow(2,3)  // 8  
        Math.pow(3,2)  // 9
        Math.sqrt(81)  // 9
        Math.sqrt(-81) // NaN
  • 向上取整和向下取整

    • Math.ceil()向上取整;Math.floor()向下取整

      js 复制代码
          Math.ceil(2.4)   // 3
          Math.floor(2.4)  // 2   
       
          Math.ceil(-2.4)   // -2
          Math.floor(-2.4)  // -3     
      
          Math.ceil(2)   // 2
          Math.floor(2)  // 2     

2. 关系运算符

意义 运算符
大于 >
小于 <
大于或等于 >=
小于或等于 <=
等于 =
不等于 !=
全等于 ===
不全等于 !==
  • 大于和小于

    • 大于>、小于<两个符号和数学相同
  • "大于等于"运算符是>=,"小于等于"运算符是<=

  • 判断是否相等

    • 如果想比较两个值是否相等,此时应该使用==运算符
    • JavaScript中等号=表示赋值,而并不是相等,判断相等应该使用==运算符。
    • 相等和全等
      • 两个等号==运算符不比较值的类型,它会进行隐式转换后比较值是否相等

      • 三个等号===运算符,不仅比较值是否相同,也比较类型是否相同

        js 复制代码
          1 == true   // true
          1 === true  // false
        
          0 == false  // true
          0 === false // false
        
          0 == undefined // false
          0 === undefined // false
        
          undefined == null // true
          undefined === null // false
      • nullundefined==进行比较涉及隐式强制类型转换,ES5规范中规定:

        • 如果xnull,yundefined,则结果为true
        • 如果xundefined,ynull,则结果为true
      • nullundefined===比较时结果为false是因为类型不同:

        • typeof null --> object
        • typeof undefined --> undefined
      • NaN不自等

        • NaN作为一个特殊的数字类型值,它在用==比较的时候也有特殊的结果

          js 复制代码
              NaN == NaN  // false
              NaN === NaN // false
      • 如何判断某变量值为NaN

        • isNaN()函数可以用来判断变量值是否为NaN

          js 复制代码
              isNaN(NaN)  // true
              isNaN(5)    // false
        • isNaN()也不好用,它的机理是:只要该变量传入Number()的执行结果是NaN,则isNaN()函数都会得到true

          js 复制代码
            isNaN(undefined)  // true
            isNaN('3天')      // true
            isNaN(null)       // false
      • 不相等和不全等

        • !=表示不相等
        • !==表示不全等
        js 复制代码
         5 != 6   // true
         5 !== 6  // true
        
         5 != '5'   // false
         5 !== '5'  // true
      • js中没有连比,绝对不可能存在3 <= a <= 15

3. 逻辑运算符

非:! 与:&& 或:||

  • !表示"非",也可以称为"置反运算"

  • !是一个"单目运算符",只需要一个操作数

  • 置反运算的结果一定是布尔值

    js 复制代码
      !true         // false
      !false        // true    
      !0            // true    
      !undefined    // true
      !''           // true
      !'zhangsan'   // false
    
      !!true        // true
      !!0           // false
      !!''          // false
      !!'zhangsan'  // true                

4. 与运算符

  • &&表示"并且",称为"与运算",全真才为真
  • 短路原则
    • a && b 运算中:a真,表达式值为b,a假,表达式值为a

      js 复制代码
        3 && 6           // 6
        undefined && 15  // undefined
        15 && undefined  // undefined
        null && 2        // null
        '' && 16         // ''
        NaN && undefined // NaN  

5. 或运算符

  • ||表示"或者",称为"或运算",有真就真

  • a || b运算中:a真,表达式值为a, a假,表达式值为b

    js 复制代码
      3 || 6          // 3
      0 || 6          // 6
      null || undefined // undefined
      'a' || 'b'      // 'a'
      NaN || null     // null
  • 逻辑值运算

    js 复制代码
      true && true   // true
      true && false   // false
      false && true   // false
      false && false   // false   
    
      true || true   // true
      true || false   // true
      false || true   // true
      false || false   // false         
  • 逻辑运算顺序

    • 逻辑运算的优先级是:非--> 与--> 或

      js 复制代码
        !true || true     // ture
        3 && 4 || 5 && 6  // 4

6. 赋值表达式

意义 运算符
赋值 =
`````` +=
-=
快捷赋值 *=
/=
`````` %=
自增运算 ++
自减运算 --
  • JS中,=表示赋值,==判断是否相等(不判断类型),===判断是否全等。
  • 赋值运算符会将等号右边的数值,赋予等号左边的变量。
  • 赋值运算也会产生值
  • 快捷赋值

7. 自增/自减运算法


8. 综合表达式

  • 运算顺序
  • 变量的范围表示

9. 重点内容

  • 表达式有哪几种? 每种表达式分别有哪些运算符?

  • 每种表达式中运算顺序是什么?综合运算顺序是什么?

  • 什么是短路计算? 3 && 11 的结果是多少? 3 || 13 呢?

  • a ++ 和 ++ a 有什么区别?

    js 复制代码
      var a = 3;
      var b = 4;
      console.log(a++ + b++ + ++a + ++b); // 18
相关推荐
量子-Alex6 分钟前
【多模态聚类】用于无标记视频自监督学习的多模态聚类网络
学习·音视频·聚类
轻口味8 分钟前
命名空间与模块化概述
开发语言·前端·javascript
吉大一菜鸡11 分钟前
FPGA学习(基于小梅哥Xilinx FPGA)学习笔记
笔记·学习·fpga开发
前端小小王43 分钟前
React Hooks
前端·javascript·react.js
迷途小码农零零发1 小时前
react中使用ResizeObserver来观察元素的size变化
前端·javascript·react.js
CCSBRIDGE3 小时前
Magento2项目部署笔记
笔记
爱吃西瓜的小菜鸡3 小时前
【C语言】判断回文
c语言·学习·算法
小A1593 小时前
STM32完全学习——SPI接口的FLASH(DMA模式)
stm32·嵌入式硬件·学习
亦枫Leonlew3 小时前
微积分复习笔记 Calculus Volume 2 - 5.1 Sequences
笔记·数学·微积分
岁岁岁平安4 小时前
spring学习(spring-DI(字符串或对象引用注入、集合注入)(XML配置))
java·学习·spring·依赖注入·集合注入·基本数据类型注入·引用数据类型注入