1. 程式人生 > >關於比較==操作符中的強制類型轉換

關於比較==操作符中的強制類型轉換

一次 size 類型 prim onu ffffff val def 進行

1、在numberstring進行比較,需要將string類型數據進行toNumber轉化成number類型進行比較

42 == ‘42’ //true

//即type(x) 如果是number類型,type(y)是string類型,比較 x == toNumber(y)

2、boolean類型和其他數據類型進行比較,將true轉換成1,fasle轉換成0

false == 0  //true

true == 1 //true

true == 2 //false

true == ‘2‘ //false

//因為true被轉換成number類型,為數字1,在 1==‘2’ 比較裏,肯定是返回false

3、null

undefined

null == undefined //true

function foo(param) {
  if(param == null) {
    // some code      
  }      
}

//所有有時也會用在判斷函數中是否傳入一個參數 

null == 0 //false

null == false //false

undefined == 0  //false

undefined == false //false

//null和undefined 和其他數據使用==比較操作符都返回false

4、對象其他類型,將對象進行toPrimitive操作進行轉化,當對象是date類型時

先進行toString()操作,如果返回的是基本類型數據,那麽返回該數據,否則進行valueOf()操作

當對象是數組或者普通對象時,先valueOf操作,如果返回的數據不是基本(值類型,非引用類型)類型數據,那麽進行toString操作

[] == 0  //true

[] == ‘‘ //true

//數組是對象,對[]進行一次valueOf操作,得到的還是原數組,所以繼續進行toString操作,得到空字符串‘ ‘
 在 [] ==0 比較中,空字符串被轉換成數字0,所有 0 == 0 ,而 ‘ ‘ ==‘ ‘自然也是true

總結: 也就是說,在==操作符進行比較的過程中,如果兩方數據類型不同,總是需要對其做類型轉換

最後比較的類型總是number或者string

關於比較==操作符中的強制類型轉換