那麼今天就帶你解開深拷貝神秘的面紗。
這就涉及到一道面試題,看似沒什麼軟用,實則非常有用的一道面試題目。
js基本資料型別一共有六種:五種簡單資料型別和一種複雜資料型別:
五種簡單資料型別包括:string、number、boolean、undefined、null
一種複雜資料型別:obeject
js有8種資料型別 六種基本資料型別+symbol+bigint
es6 中新增了一種 symbol 。這種型別的物件永不相等,即始建立的時候傳入相同的值,可以解決屬性名衝突的問題,做為標記。
谷歌67版本中還出現了一種 bigint。是指安全儲存、操作大整數。(但是很多人不把這個做為乙個型別)。
引用型別有 array date function
基本資料型別是指存放在棧中的簡單資料段,資料大小確定,記憶體空間大小可以分配,它們是直接按值存放的,所以可以直接按值訪問
引用型別是存放在堆記憶體中的物件,變數其實是儲存的在棧記憶體中的乙個指標(儲存的是堆記憶體中的引用位址),這個指標指向堆記憶體。
引用型別資料在棧記憶體中儲存的實際上是物件在堆記憶體中的引用位址。通過這個引用位址可以快速查詢到儲存中堆記憶體中的物件
面試的時候你就簡單記憶就好了 ,五種簡單資料型別存的是值,引用型別和object存的是記憶體位址(會指向它本身)
遞迴拷貝你可以理解把陣列 或者物件完全剝開,因為遞迴拷貝會反覆取遍歷裡面的內容。
完全遍歷那麼裡面拿到的值 一定不是引用型別或者object
最後一定就是基本資料型別 那自然而然拿到的值就是深拷貝。
這樣我們就不難理解為什麼 object.assign slice 只能進行簡單的深拷貝。
因為它只能剝開一層的值 如果物件裡面還有物件那就無法剝開
所以深拷貝的原理就是用到了資料的基本型別。
js中的淺拷貝深拷貝深入理解
舉個例子來說明一下什麼是淺拷貝什麼是深拷貝 var x c 1,2,3 var y shallow x 得出的結果可以看出是淺拷貝 出現這種情況的本質是 物件是按引用賦值的 指的是拷貝乙個物件,改變乙個值不影響另乙個的值 實現深複製功能 判斷 1.是否是物件 2.是否是函式 function dee...
js深度拷貝和淺度拷貝的深入理解
首先我們來說說什麼是拷貝 就是複製的同時加上了傳值。然後問題就來了什麼是有深度的什麼是淺度的,在想要了解我們這個問題之前我們先來了解一下下面的乙個知識點 基本型別傳遞,引用型別傳遞 首先我們來看下基本型別傳遞 就是基本資料型別之間的資料傳遞,什麼是基本資料型別呢?string,number,bool...
js深入理解 一
1if a b 兩者等價 a b alert hello word 2.給eval取別名var a 111 var b eval var c b a alert c 輸出 111 3.刪除元素 不能刪除 var語句宣告的變數 var o delete o.x alert o.x 輸出 undefin...