裝箱操作:把基本數據類型轉換為對應的引用類型的操作。
拆箱操作: 把引用類型轉換為基本數據類型的操作。
上面兩個概念只是簡潔的實質總結,可能看完后大家心里會產生疑問,到底怎么樣叫裝箱操作和拆箱操作呢?下面我們一起帶著這個疑問往下看~~
裝箱操作
首先我們要知道在js中有三個基本包裝類型:Number,String,Boolean,先簡單看下小demo
var str="hello world";
var strRes=str.split(" ");
console.log(strRes) //["hello", "world"]
如上面代碼所示,變量str是一個基本類型值,不是一個對象,就不存在方法,但上面代碼卻顯示可以正常調用方法。實際上這一切都是js內部做了以下處理:
(1)創建String類型的一個實例;
(2)在實例上調用指定的方法;
(3)銷毀這個實例;
轉換為對應代碼就是:
var str = new String("hello world");
var strRes = str.split(" ");
str = null;
其實,說白了就是臨時創建了一個對象,然后去調用方法。下面這句話引用自《javascript高級程序設計》一書中:
每當讀取一個基本類型的時候,后臺就會創建一個對應的基本包裝類型對象,從而讓我們能夠調用一些方法來操作這些數據。
拆箱操作
拆箱操作中主要有兩個方法,valueOf()方法和toString()方法。這兩個方法主要用來檢測你返回的是不是一個基本類型的值。一般是先用valueOf()來檢測,如果返回的不是一個基本類型的值,是對象自身,則會繼續用toString()來檢測,如果檢測結果不是一個基本類型的值,則會報錯(Uncaught SyntaxError: Invalid or unexpected token)。以下是兩個方法的具體描述,引用自MDN。
valueOf
1.valueOf() 方法返回指定對象的原始值。
2.JavaScript調用valueOf方法將對象轉換為原始值。你很少需要自己調用valueOf方法;當遇到要預期的原始值的對象時,JavaScript會自動調用它。
3.默認情況下,valueOf方法由Object后面的每個對象繼承。 每個內置的核心對象都會覆蓋此方法以返回適當的值。如果對象沒有原始值,則valueOf將返回對象本身。
4.JavaScript的許多內置對象都重寫了該函數,以實現更適合自身的功能需要。因此,不同類型對象的valueOf()方法的返回值和返回值類型均可能不同。
toString
1.toString() 方法返回一個表示該對象的字符串。
2.每個對象都有一個 toString() 方法,當該對象被表示為一個文本值時,或者一個對象以預期的字符串方式引用時自動調用。
3.默認情況下,toString() 方法被每個 Object 對象繼承。如果此方法在自定義對象中未被覆蓋,toString() 返回 “[object type]”,其中 type 是對象的類型。
demo
var objNum = new Number(123);
var objStr =new String("123");
console.log( typeof objNum ); //object
console.log( typeof objStr ); //object
console.log( typeof objNum.valueOf() ); //number
console.log( typeof objStr.valueOf() ); //string
console.log( typeof objNum.toString() ); // string
console.log( typeof objStr.toString() ); // string
————————————————
版權聲明:本文為CSDN博主「DLGDark」的原創文章,遵循CC 4.0 BY-SA版權協議,轉載請附上原文出處鏈接及本聲明。
原文鏈接:https://blog.csdn.net/DLGDark/article/details/100836377