裝箱:就是把基本類型轉變為對應的對象。裝箱分為隱式和顯示
-
隱式裝箱: 每當讀取一個基本類型的值時,后台會創建一個該基本類型所對應的對象。在這個基本類型上調用方法,其實是在這個基本類型對象上調用方法。這個基本類型的對象是臨時的,它只存在於方法調用那一行代碼執行的瞬間,執行方法后立刻被銷毀。
let num=123; num.toFixed(2); // '123.00'//上方代碼在后台的真正步驟為 var c = new Number(123); c.toFixed(2); c = null;
(1)創建一個 Number 類型的實例。
(2)在實例上調用方法。
(3)銷毀實例。
顯式裝箱: 通過內置對象 Boolean、Object、String 等可以對基本類型進行顯示裝箱。
var obj = new String('123');
拆箱
拆箱與裝箱相反,把對象轉變為基本類型的值。拆箱過程內部調用了抽象操作 ToPrimitive 。該操作接受兩個參數,第一個參數是要轉變的對象,第二個參數 PreferredType 是對象被期待轉成的類型。第二個參數不是必須的,默認該參數為 number,即對象被期待轉為數字類型
-
Number 轉化為對象
1.先調用對象自身的valueOf方法。如果返回原始類型的值,則直接對該值使用Number函數,返回結果。
2.如果valueOf返回的還是對象,繼續調用對象自身的toString方法。如果toString返回原始類型的值,則對該值使用Number函數,返回結果。
3.如果toString返回的還是對象,報錯。
Number([1]); //1 轉換演變: [1].valueOf(); // [1]; [1].toString(); // '1';Number('1'); //1
-
String 轉化為對象
1.先調用對象自身的toString方法。如果返回原始類型的值,則對該值使用String函數,返回結果。
2.如果toString返回的是對象,繼續調用valueOf方法。如果valueOf返回原始類型的值,則對該值使用String函數,返回結果。
3.如果valueOf返回的還是對象,報錯。
String([1,2]) //"1,2" 轉化演變: [1,2].toString(); //"1,2" String("1,2"); //"1,2"
-
Boolean 轉化對象
Boolean轉換對象很特別,除了以下六個值轉換為false,其他都為true
undefined null false 0(包括+0和-0) NaN 空字符串('') Boolean(undefined) //false Boolean(null) //false Boolean(false) //false Boolean(0) //false Boolean(NaN) //false Boolean('') //false Boolean([]) //true Boolean({}) //true Boolean(new Date()) //true