==和===的區別

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
複製代碼

----------------------------------------------------------------------------------------------------------------
參考文章&&強烈推薦:布羅利瀏覽器

相關文章
相關標籤/搜索