91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

es6深度拷貝的實現方法有哪些

發布時間:2022-03-23 13:32:16 來源:億速云 閱讀:229 作者:iii 欄目:web開發

這篇文章主要介紹“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)
}

(溫馨提示:數組拷貝方法當中,使用...sliceconcat等進行拷貝也是一樣的效果,只深拷貝最外層)

同時,我們知道Object.assign針對的是對象自身可枚舉的屬性,對于不可枚舉的沒有效果;

所以,當我們對于一個層次單一對象的時候,可以考慮這種方法,簡單快捷。(試過了,也不支持undefined)

方法2:利用JSON

這是我們最最最常提到的一種深拷貝的方式,一般大部分的深拷貝都可以用JSON的方式進行解決,本質是因為JSON會自己去構建新的內存來存放新對象。

function cloneDeepJson(obj){
  return JSON.parse(JSON.stringify(obj))
}

但是我們要注意的是:

  • 會忽略 undefinedsymbol

  • 不可以對Function進行拷貝,因為JSON格式字符串不支持Function,在序列化的時候會自動刪除;

  • 諸如 Map, Set, RegExp, Date, ArrayBuffer 和其他內置類型在進行序列化時會丟失;

  • 不支持循環引用對象的拷貝;(循環引用的可以大概地理解為一個對象里面的某一個屬性的值是它自己)

方法3:利用jQuery的$.extend()

var array = [1,2,3,4];
var newArray = $.extend(true,[],array);

顯而易見,最大的缺點就是我們還需要引入jQuery庫了,所以也不太常用;

到此,關于“es6深度拷貝的實現方法有哪些”的學習就結束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學習,快去試試吧!若想繼續學習更多相關知識,請繼續關注億速云網站,小編會繼續努力為大家帶來更多實用的文章!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

es6
AI

台东县| 平泉县| 永安市| 铁岭市| 聂拉木县| 苏尼特右旗| 旬阳县| 武功县| 永宁县| 广汉市| 乡宁县| 凤翔县| 苏尼特右旗| 清原| 磴口县| 济南市| 谢通门县| 连云港市| 绥江县| 商都县| 丰镇市| 福安市| 加查县| 贵州省| 康马县| 阳朔县| 大邑县| 蕉岭县| 驻马店市| 云梦县| 铁力市| 博乐市| 西和县| 阳信县| 塔河县| 灵武市| 遂平县| 泽库县| 永州市| 富宁县| 东乌珠穆沁旗|