您好,登錄后才能下訂單哦!
這篇文章主要介紹“es6深度拷貝的實現方法有哪些”,在日常操作中,相信很多人在es6深度拷貝的實現方法有哪些問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”es6深度拷貝的實現方法有哪些”的疑惑有所幫助!接下來,請跟著小編一起來學習吧!
深度拷貝的實現方法:1、使用“Object.assign({},obj)”語句來實現;2、使用“JSON.parse(JSON.stringify(obj))”語句來實現;3、使用“$.extend(true,[],arr)”語句來實現。
本教程操作環境:windows7系統、ECMAScript 6版、Dell G3電腦。
什么是深度拷貝
深拷貝就是相對與淺拷貝而言的,最主要的差異體現在引用類型上,從本質上講就是淺拷貝只簡簡單單地把棧當中的引用地址拷貝了一份,所以當你修改新拷貝出來的值的時候,被拷貝的對象也會被你修改掉;而深拷貝是會在堆內存當中為新對象建立空間,所以被拷貝的對象就不會被無緣無故地被修改掉了。
es6中如何實現深度拷貝
方法1:使用Object.assign
Object.assign默認是對對象進行深拷貝的,但是我們需要注意的是,它只對最外層的進行深拷貝,也就是當對象內嵌套有對象的時候,被嵌套的對象進行的還是淺拷貝;
function cloneDeepAssign(obj){ return Object.assign({},obj) }
(溫馨提示:數組拷貝方法當中,使用...
、slice
、concat
等進行拷貝也是一樣的效果,只深拷貝最外層)
同時,我們知道Object.assign
針對的是對象自身可枚舉的屬性,對于不可枚舉的沒有效果;
所以,當我們對于一個層次單一對象的時候,可以考慮這種方法,簡單快捷。(試過了,也不支持undefined)
方法2:利用JSON
這是我們最最最常提到的一種深拷貝的方式,一般大部分的深拷貝都可以用JSON的方式進行解決,本質是因為JSON會自己去構建新的內存來存放新對象。
function cloneDeepJson(obj){ return JSON.parse(JSON.stringify(obj)) }
但是我們要注意的是:
會忽略 undefined
和symbol
;
不可以對Function
進行拷貝,因為JSON
格式字符串不支持Function
,在序列化的時候會自動刪除;
諸如 Map
, Set
, RegExp
, Date
, ArrayBuffer
和其他內置類型在進行序列化時會丟失;
不支持循環引用對象的拷貝;(循環引用的可以大概地理解為一個對象里面的某一個屬性的值是它自己)
方法3:利用jQuery的$.extend()
var array = [1,2,3,4]; var newArray = $.extend(true,[],array);
顯而易見,最大的缺點就是我們還需要引入jQuery庫了,所以也不太常用;
到此,關于“es6深度拷貝的實現方法有哪些”的學習就結束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學習,快去試試吧!若想繼續學習更多相關知識,請繼續關注億速云網站,小編會繼續努力為大家帶來更多實用的文章!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。