Go转JS-第二弹(表达式与运算符)

20 阅读1分钟

JavaScript中的表达式与运算符学习

1、隐式类型的转换

  • 如果参与数学运算的某操作数不是数字型,js就会自动将此转换为数字类型。此过程称为隐式类型转换
  • 隐式转换的本质是内部调用Number()函数
    true + true ==> Number(true) + Number(true) = 1 + 1 = 2  
    false + 2   ==> Number(false) + 2 = 0 + 1 = 2 
    3 * '2天' ==> 3 + Number('2天') = 3 * NaN = NaN 

注意:当进行加法运算,某操作数为字符串时,并不会发生隐式转换,而是起到连字符作用

2、相等与全等

  • ==:相等。只比较值,不比较类型。本质是通过隐式转换后来比较值是否相等
  • ===:全等。同时比较值和类型。

2.1、undefined 与 null

  • nullundefined在进行相等比较时,涉及隐式强制类型转换,ES5规范中规定
    undefined == null   // true
    undefined === null  // false

undefined的类型为undefined,而null的类型为object

2.2、NaN不自等

  • NaN == NaN (false)

2.2.1、判断NaN

  • 可使用isNaN()来判断值是否为NaN
  • isNaN()的原理与Number()的执行结果是一致,意味着Number()的执行结果为NaNisNaN()的执行结果也是NaN。(尽量不要使用)
    isNaN(NaN)   // true
    isNaN('3天') // false

3、JavaScript没有连比

    // 假设a = 16
    3 <= a <= 15  // ==执行结果==> (true <= 15) ==> true ,但实际为false
    // 正确的写法
    3 <= a && a <= 15 

4、逻辑运算符中的短路计算

  • 优先级:非 -> 与 -> 或
  • 短路计算的原理:
    • 当前面的操作数能决定结果时,后面的操作数不会再运行,即结果为前面的操作数
    • 相反,当前面的操作数无法决定结果时,结果即为后面的操作数
    3 && 6        // 6
    false && true // false
    false || 5    // 5 
    1 || 4        //1