最近工做中遇到一個問題,對現目錄進行正序、倒序展現的操做,但真正的數據順序不發生變化。
複製代碼
基本類型的變量是存儲在棧內存中的,棧內存包括變量名和變量值;es6
引用類型的值同時存儲在棧內存和堆內存中,棧內存中保存的是變量名和指向堆內存中對象的指針。形成這樣的緣由是因爲在Js中不容許直接操做對象的內存空間,只能操做對這個對象的引用;數組
基本類型的比較是值的比較,引用類型的比較是引用的比較函數
基本類型:spa
eg: let str1="ceshi";
let str2=str1;指針
由此可知: 基本類型的複製,其實是在棧內存中開闢了新的存儲空間,來存儲新的變量和值。一個的改變,不會影響另外一個的變化,兩者互不干擾。code
引用類型:cdn
eg: let obj1=new Object(); let obj2=new Object();對象
由此可知: 引用類型的複製,實際上只是對引用的複製,二者的指針同時指向堆內存中的同一個對象。一個的改變,會影響另外一個的變化,二者互相影響。blog
淺拷貝:就是拷貝一層,面對深層次的對象級別,就僅僅拷貝了其引用。 深拷貝:就是拷貝多層,即對每一層的數據都進行了拷貝,面對深層次對象級別,防止拷貝了其引用類型遞歸
淺拷貝:
方法一:拷貝對象有多層,直接遍歷,則是淺拷貝
方法二:使用es6的Object.assign({},原對象);提示:(拷貝的對象有多層,此方法實現的是淺拷貝;拷貝的對象只有一層,此方法實現的是深拷貝)
深拷貝:
數組深拷貝:即防止拷貝到引用類型,防止彼此影響
方法一:es6 Array.from(要拷貝的數據)
方法二:es6 數組解構 ...
方法三:若拷貝的對象爲一層,直接遍歷,爲深拷貝 方法四:使用JSON.stringify()、JSON.parse(),不足:若深層是函數,則實現不了深拷貝
方法五:使用遞歸思想
說到這裏算是大體結束。我最後在項目中的解決方案:
因爲個人目錄數據是一層的,因此使用es6的方法,進行了深拷貝。這樣當目錄數據倒序時,我獲取的接口數據並無發生順序的變化