学习笔记整理-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
相关推荐
麒麟而非淇淋4 分钟前
AJAX 入门 day3
前端·javascript·ajax
茶茶只知道学习17 分钟前
通过鼠标移动来调整两个盒子的宽度(响应式)
前端·javascript·css
蒟蒻的贤20 分钟前
Web APIs 第二天
开发语言·前端·javascript
清灵xmf23 分钟前
揭开 Vue 3 中大量使用 ref 的隐藏危机
前端·javascript·vue.js·ref
蘑菇头爱平底锅25 分钟前
十万条数据渲染到页面上如何优化
前端·javascript·面试
2301_8010741532 分钟前
TypeScript异常处理
前端·javascript·typescript
ᅠᅠᅠ@32 分钟前
异常枚举;
开发语言·javascript·ecmascript
caperxi35 分钟前
前端开发中的防抖与节流
前端·javascript·html
学习路上的小刘37 分钟前
vue h5 蓝牙连接 webBluetooth API
前端·javascript·vue.js
&白帝&37 分钟前
vue3常用的组件间通信
前端·javascript·vue.js