js是弱資料型別語言,即它宣告的變數,可以被賦值成不同型別的資料.
也就是說,同乙個變數.我可以先是基礎資料型別,然後馬上被賦值成引用資料型別;也可以先是引用資料型別,然後被賦值成基礎資料型別.
let a = '你好'console.log(a)//你好
let b =new string('你好')console.log(b,b.valueof())//string 你好
簡單來說就是將直接宣告的變數再new一下,根據乙個基礎資料型別變數裝箱成乙個對應的型別物件
你只需要a的字串值的時候,它就是乙個基礎資料型別,你想要知道這個字串的長度的時候,你就封裝成乙個string物件
let a = '你好'console.log(a)//你好
let b =new string(a)
console.log(b,b.length,b.valueof())//string 2 你好
基礎資料型別a------>和a對應的物件b
這麼做是不是有點多此一舉?你會這麼覺得是因為js為你做了隱式裝箱
我之前的部落格中有提到乙個問題,基礎型別資料為啥有屬性
裡面有講到一點,基礎資料型別資料在使用的過程中很多時候其實都被處理成了臨時物件.我們用**去理解一下
let a = '你好'console.log(a,a.length,a.valueof())//你好 2 你好
let b =new string('你好')
console.log(b,b.length,b.valueof())//string 2 你好
所以,js覺得你只是想用a的字串值了就不裝箱,它覺得你需要裝箱了就給你裝箱.你只管用就行
let a = '你好'console.log(a.length)//你好
其實就是
let tem = '你好'let a =new string(tem)
console.log(a.length)// 2
物件轉成對應的基礎資料型別
let a =new string('你好')let b = a.tostring()
console.log(b)
let a =new string('你好')console.log(a+'我好')//你好我好
也是同樣的道理,js覺得你需要拆了就給你拆,覺得你不需要拆了就不拆.
JS裝箱操作和拆箱操作的理解
一 裝箱操作 定義 把基本資料型別轉換為對應的引用型別的操作稱為裝箱。每一種基本型別number string boolean在物件中都有相應的類 產生的臨時物件 然後呼叫 tostring 方法。例如 1 tostring 1 呼叫過程把1進行裝箱操作轉換成number的臨時物件呼叫tostrin...
什麼是裝箱,拆箱?怎樣操作?
從值型別介面轉換到引用型別裝箱。從引用型別轉換到值型別拆箱。通過裝箱和拆箱操作,能夠在值型別和引用型別中架起一做橋梁.換言之,可以輕鬆的實現值型別與引用型別的互相轉換,裝箱和拆箱能夠統一考察系統,任何型別的值最終都可以按照物件進行處理.c 語言中的所有型別都是由基類system.object繼承過來...
再談C 裝箱和拆箱操作
看下面的一段 12 3456 78vararray newarraylist array.add 1 array.add 2 foreach intvalueinarray value 宣告了乙個arraylist物件,向arraylist中新增兩個數字1,2 然後使用foreach將arrayli...