關於比較==操作符中的強制類型轉換
阿新 • • 發佈:2017-10-02
一次 size 類型 prim onu ffffff val def 進行 與undefined
1、在number和string進行比較,需要將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
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
關於比較==操作符中的強制類型轉換