Skip to content

一、表达式和运算符

1. 表达式

expression.png

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

二、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中,=表示赋值,==判断是否相等(不判断类型),===判断是否全等。
  • 赋值运算符会将等号右边的数值,赋予等号左边的变量。
  • 赋值运算也会产生值 equal.png
  • 快捷赋值 equal-1.pngequal-2.png

7. 自增/自减运算法

increment.png
increment-1.png

8. 综合表达式

  • 运算顺序 synthesis.png
  • 变量的范围表示 synthesis-1.png

9. 重点内容

  • 表达式有哪几种? 每种表达式分别有哪些运算符?
  • 每种表达式中运算顺序是什么?综合运算顺序是什么?
  • 什么是短路计算? 3 && 11 的结果是多少? 3 || 13 呢?
  • a ++ 和 ++ a 有什么区别?
    js
      var a = 3;
      var b = 4;
      console.log(a++ + b++ + ++a + ++b); // 18

Released under the MIT License.