1. 程式人生 > >javascript考點 —— 型別轉換

javascript考點 —— 型別轉換

一、資料型別

最新的ECMAScript標準定義了7種資料型別

基本資料型別:Boolean、Null、Undefined、Number、String、Symbol

引用資料型別:Object

二、顯式型別轉換

顯示呼叫:Number函式、String函式、Boolean函式。

1、Number函式

數值:轉換後還是原來的值。

字串:如果可以被解析,則轉換為相應的數值,否則得到NaN。空字串轉換為0。

布林值:true轉換為1,false轉換為0。

undefined:轉換為NaN。

null:轉換成0。

console.log(Number(324))            //324
console.log(Number('324'))          //324
console.log(Number('324abc'))       //NaN 
console.log(Number(''))             //0
console.log(Number(undefined))      //NaN
console.log(Number(false))          //0
console.log(Number(true))           //1
console.log(Number(null))           //0

物件:先呼叫物件自身的valueOf方法,如果帶方法返回原始型別的值(數值、字串、布林值),則直接對該值使用Number方法,不再進行後續步驟。如果valueOf方法返回符合型別的值,再呼叫物件自身的toString方法,如果toString方法返回原始型別的值,則對該值使用Number方法,不再進行後續步驟。如果toString方法返回的符合型別的值,則報錯。

var a = {a:1}
console.log(Number(a))
//轉換為NaN的過程,首先呼叫a.value(),結果是{a:1},不是基本資料型別,然後接著呼叫a.toString(),結果是"[Object Object]",然後字串轉換為NaN

2、String型別

數值:轉為相應的字串。

字串:轉換後還是原來的值。

布林值:true轉換為“true”,false轉換為“false”。

undefined:轉換為"undefined"。

bull:轉換為"null"。

console.log(String(123))     //"123"
console.log(String('abc'))   //"abc"
console.log(String(true))    //"true"
console.log(String(undefined))   //"undefined"
console.log(String(null))        //"null"

物件:先呼叫toString方法,如果該方法返回的是原始型別的值,則對該值使用String方法,不再進行以下步驟。如果toString方法返回的是符合型別的值,再呼叫valueOf方法,如果vlaueOf方法返回的是原始型別的值,則對該值使用String方法,不再進行一下步驟。如果valueOf方法返回的是複合型別的值,則報錯。

var b = {
    a:1
}
console.log(String(b))   //
//先呼叫b.toString()方法,然後得到"[Object Object]",返回的是String型別,然後它就不再向後繼續呼叫。


var c = {
    a:1,
    toString:function(){
        return {
            b: 2
        }
    },
    valueOf:function(){
        return 'b'
    }
}
console.log(String(c))    //'b'
//先呼叫c.toString()方法,返回的不是原始資料型別,接著呼叫valueOf()方法,返回的是原始資料型別,然後就輸出'b',如果去掉valueOf()方法,則會報錯

3、Boolean函式

undefined、null、-0、+0、NaN、""(空字串)          轉換後的結果都為false。除了前面的幾個,其他都為true。

三、隱式型別轉換

1、四則運算

2、判斷語句

3、Native呼叫

4、常見的題目

{} + {} firforx的結果是NaN,他把{}當作程式碼塊處理的。{} + []這裡的結果是0,不論是chrom還是firforx都把{}當作了程式碼塊。

5、typeof