==和===的区别

js(学习笔记) ---- 九层之台,起于累土;javascript

都是等于比较 == 相对比较 === 严格比较java

// == 相对等于 两边值类型不一样时,会发生隐式类型转换 再比较

    // 当比较两个值时 若是类型不一样 会转换成相同类型 再进行比较

    // 其余类型 跟 数字进行比较时 先转换成数字 再进行比较
    // Number()
    console.log('2' == 2) // Number('2') == 2 => true

    console.log('' == 0) // Number('') == 0 => 0 == 0 => true

    console.log([] == 0) // Number([]) == 0

    console.log(false == 0) // 0 == 0 => true
    console.log(true == 1) // 1 == 1 => true

    // 其余类型跟boolean值进行比较 两边值都转换成数字 再比较
    // true => 1
    // false => 0

    '' == false // Number('') == Number(false) => true

    [1] == false // Number([1]) == Number(false) => 1 == 0 => false

    // 字符串和引用类型进行比较 把引用类型转换成字符串
    // 每一个对象数据类型 toString() 转换成字符串
    var obj = {}

    // obj.toString() => "[object Object]"
    // abc' == "[object Object]"
      'abc' == obj // false

      console.log("[object Object]" == obj)

      var obj2 = { id: 1, title: 'title' }

      // {} 普通对象 转换成字符串 都是 "[object Object]"
      obj2.toString() // "[object Object]"

      var arr = [1]

      // arr.toString() => '1'

      '1' == arr // '1' == arr.toString() => '1' == '1' => true

      var ary = [1, 2, 3, 4]

      '2' == ary // '2' == "1,2,3,4"

      // ary.toString() => "1,2,3,4"
      "1,2,3,4" == ary // "1,2,3,4" == "1,2,3,4" => true

      // 引用类型与引用类型进行比较

      // 只要你建立一个对象 var 变量 = {}
      // 浏览器就会分配一起新的内存

      // o1 o2 存储的是两块不一样内存的引用地址

      // 内存1 xxxfff111
      var o1 = {id: 1}

      // 内存2 xxxfff222
      var o2 = {id: 1}

      // 内存3 xxxfff333
      var a1 = []

      // xxxfff111 == xxxfff222
      console.log(o1 == o2)

      // xxxfff111 == xxxfff333
      console.log(o1 == a1)

      // 假设引用地址 xx2
      var o4 = {title: 'o4'}

      // o5 = xx2
      var o5 = o4

      // xx2 == xx2
      console.log(o5 == o4)

      // 特殊记
      // NaN 跟任何值都不相等(包括跟本身)

      NaN == NaN // false

      NaN == null
      NaN == 0

      // null 和 undefined 相对比较 为true
      console.log(null == undefined) // true

      // 它两和其余类型都不相等
      null == 0 // false

    // == 相对比较时 比较规则
    // 1.其余类型跟数字进行比较时 先转换成数字 再进行比较
    // 2.其余类型跟boolean值进行比较 两边值都转换成数字 再比较
    // 3.字符串和引用类型进行比较 把引用类型转换成字符串
    // 4.引用类型和引用类型比较 比较的是引用地址
    // 5.特殊记 NaN null undefined

    // === 绝对等于 不会进行类型转换

    // 两边类型不一样 直接就返回false
    // 若是类型相同 就比较具体值
    // 引用类型和引用类型比较 比较的是引用地址

    '1' == 1 // true
    '1' === 1 // false

    null === undefined // false


    // 尽可能用===严格比较

    '1' == 1


    // eslint 代码检查工具 规范代码

    // != 相对不等于 会类型转换
    // !== 严格不等于


    // 0 '' null undefined NaN 都是false

    // []转换成boolean 是true 取反后 false

    // ![] => !true => false
    console.log([] == ![]) // [] == false => 0 == 0 => true
复制代码

----------------------------------------------------------------------------------------------------------------
参考文章&&强烈推荐:布罗利浏览器