1. 加减乘除运算符 + - * / % () ++ —

  • 优先级:括号运算 > 普通运算 > 赋值
      • 功能:数学运算、字符串拼接
      • 任何数据类型的值 + 字符串,结果都是字符串
  • /
    • 0 / 0 -> NaN ; "a" / "b" -> NaN ; NaN / 1 -> NaN
    • typeof NaN -> "number"
    • 1 / 0 -> Infinity ; -1 / 0 -> -Infinity
    • typeof Infinity -> "number"
  • %
    • 5 / -3 -> 2 ; -5 % 3 -> -2; 取余结果与被除数正负号一致
  • ++, —
    • 前++ 后++
    • 前— 后—

2. 比较运算符 > < >= <= == === != !==

  • number - number
  • number - string, string -> number 1 > "2" -> false
  • string - string, 从左到右,依次比较每一个位置上字符对应的ASCII码,直到比较出大小为止
  • 相等 ==, != 是不看数据类型的 1 == "1" -> true
  • 全等 ===, !== 需要看数据类型也是否相等 1 === "1" -> false
  • NaN与包括自己在内的任何东西都不相等NaN === NaN -> false; NaN == NaN -> false

3. 判断分支语句

1. IF 语句

  • 多个条件互斥时,相对于使用多个if语句, 使用if…else…语句可以减少判断次数。

2. Switch 语句

  • 不要忘记break!
  • 范围判断变量值用 true switch(true) { case condition: } (此场景建议使用 if 语句

IF vs Switch 使用场景

  • Switch:定值,有限个数
  • IF: 范围判断

4. 逻辑运算 与&& 或|| 非!

值为 **undefined, null, NaN, "", 0, false** 时,判断为假;除此以外全部为真

与 && sta1 && sta2 && sta3 && ...

  • sta1 为时,继续向后判断sta2
  • 出现第一个为假的值时,返回此假值,结束判断
  • 前面的语句全为真时,返回最后一个语句的值
  • 总结:有一个假则假,全为真才真

或 || sta1 || sta2 || sta3 || ...

  • sta1 为时,继续向后判断sta2
  • 出现第一个为真的值时,返回此真值,结束判断
  • 前面的语句全为假时,返回最后一个语句的值
  • 总结:有一个真则真,全为假才假

非 !

  • !sta 总是返回 boolean