类型转换 == vs === vs Ojbect.is

188 阅读1分钟

关于==

== 代表不需要类型相同,但是经过类型转换之后大小相等

  • 首先会判断两者类型是否相同。相同的话就是比大小了
  • 类型不相同的话,那么就会进行类型转换
  • 会先判断是否在对比 null 和 undefined,是的话就会返回 true
  • 判断两者类型是否为 string 和 number,是的话就会将字符串转换为 number
  • 判断其中一方是否为 boolean,是的话就会把 boolean 转为 number 再进行判断
        // 字符串和数字比较,字符串转数字
        // 布尔与数字比较,布尔转数字
        // 字符串和布尔比较,都转成数字
    
  • 判断其中一方是否为 object 且另一方为 string、number 或者 symbol,是的话就会把 object 转为原始类型再进行判断
  • 如果两者类型都是object,引用都指向同一个对象才为true

转换为boolean

除了undefined, null, '', 0, -0, NaN, false,其他的都会转成true

关于===

=== 代表全等,类型相同,大小相等

Object.is

ES6的新方法 判断两个值是否全等,与ES5中的全等===的区别是:

    // 1、NaN的比较
    Object.is(NaN, NaN) //true
    NaN === NaN // fale
    // 2、-0和+0的比较
    Object.is(-0, +0) //false
    -0 === +0 // true

类型转换表

类型转换的题

  1. 关于数组,结果是什么,为什么
  • [] == [] //
  • [] != [] //
  • Boolean([]) //
  • [] - [] //
  • [] + [] //
  • [] == 0 //
  • [0] == 0 //
  • [1] + 0 //