JavaScript的深拷貝與淺拷貝

来源:https://www.cnblogs.com/ITBOSS-Li/archive/2023/03/30/17274036.html
-Advertisement-
Play Games

一句話來解釋什麼是深淺拷貝,B拷貝A,當修改A,B如果變化,就是淺拷貝,反之就是深拷貝。 基本原理: 1.遞歸函數2.對象內的值都是簡單數據類型時 直接進行賦值3.當我們遇到數組和對象時,可以再次調用函數,利用遞歸去拷貝數組和對象內的每個值4.先數組 後對象 因為數組也是對象 下麵是一個實現深拷貝的 ...


一句話來解釋什麼是深淺拷貝,B拷貝A,當修改A,B如果變化,就是淺拷貝,反之就是深拷貝

基本原理:

1.遞歸函數
2.對象內的值都是簡單數據類型時 直接進行賦值
3.當我們遇到數組和對象時,可以再次調用函數,利用遞歸去拷貝數組和對象內的每個值
4.先數組 後對象  因為數組也是對象 

下麵是一個實現深拷貝的函數:

 1 function deepClone(obj) {
 2         let objClone = Array.isArray(obj) ? [] : {};
 3         if (obj && typeof obj === "object") {
 4             for (key in obj) {
 5                 if (obj.hasOwnProperty(key)) {
 6                     //判斷ojb子元素是否為對象(複雜數據類型),如果是,遞歸複製
 7                     if (obj[key] && typeof obj[key] === "object") {
 8                         objClone[key] = deepClone(obj[key]);
 9                     } else {
10                         //如果不是,簡單複製(基本數據類型)
11                         objClone[key] = obj[key];
12                     }
13                 }
14             }
15         }
16         return objClone;
17     }

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • GreatSQL社區原創內容未經授權不得隨意使用,轉載請聯繫小編並註明來源。 GreatSQL是MySQL的國產分支版本,使用上與MySQL一致。 作者: 楊延昭 文章來源:GreatSQL社區投稿 在進行資料庫備份的時候主要分為了邏輯備份和物理備份這兩種方式。在數據遷移和備份恢復中使用mysqld ...
  • MySQL 1. 索引 1.1 什麼是索引 索引是一種特殊的文件(InnoDB數據表上的索引是表空間的一個組成部分),它們包含著對數據表裡所有記錄的引用指針。 索引是一種數據結構。資料庫索引,是資料庫管理系統中一個排序的數據結構,以協助快速查詢、更新資料庫表中數據。索引的實現通常使用B樹及其變種B+ ...
  • 摘要:應用業務模型ABM(Application Business Model)是MSSI為客戶提供的統一模型管理服務。 本文分享自華為雲社區《【雲圖說】 | 第274期 MSSI之應用業務模型ABM,搭建業務與技術的數據治理橋梁》,作者:閱識風雲。 應用業務模型ABM(Application Bu ...
  • 摘要:SSRF (Server-Side Request Forgery,伺服器端請求偽造)是指由攻擊者構造請求,然後利用伺服器的漏洞以服務端的身份向內網發送請求對內網發起攻擊。 本文分享自華為雲社區《GaussDB(DWS)安全測試之SSRF漏洞》,作者: ACBD。 1. 什麼是SSRF漏洞 S ...
  • 這篇主要描述了B端令牌系統應用數據分表解決業務數據量增大,且存在的數據傾斜問題,主要面向的場景是一對多數據傾斜問題 ...
  • GreatSQL社區原創內容未經授權不得隨意使用,轉載請聯繫小編並註明來源。 GreatSQL是MySQL的國產分支版本,使用上與MySQL一致。 作者: 葉金榮 文章來源:GreatSQL社區原創 1. MySQL 8.0數據字典有什麼變化 從MySQL 8.0開始,採用獨立表空間模式的每個Inn ...
  • 近些年來,隨著手機技術迭代更新越來越快,用戶更換手機的周期也在縮短,在這樣的背景下,開發者不得不面臨以下問題: 同一開發者旗下常常有多個安卓應用和多形態應用(快應用和Web應用),用戶更換一個新的設備(手機或平板)後,在新設備上登錄各應用時每次都需要重覆輸入帳號和密碼,導致用戶在登錄階段流失率增加, ...
  • 這是一款使用 ChatGPT API 進行劃詞翻譯和文本潤色的瀏覽器插件。藉助了 ChatGPT 強大的翻譯能力,它將幫助您更流暢地閱讀外語和編輯外語。 它能幹啥 一. 可翻譯 二. 可潤色 三. 可總結 四. 可分析 五. 可解釋程式代碼 插件地址 OpenAI Translator 勸退聲明 由 ...
一周排行
    -Advertisement-
    Play Games
  • 基於.NET Framework 4.8 開發的深度學習模型部署測試平臺,提供了YOLO框架的主流系列模型,包括YOLOv8~v9,以及其系列下的Det、Seg、Pose、Obb、Cls等應用場景,同時支持圖像與視頻檢測。模型部署引擎使用的是OpenVINO™、TensorRT、ONNX runti... ...
  • 十年沉澱,重啟開發之路 十年前,我沉浸在開發的海洋中,每日與代碼為伍,與演算法共舞。那時的我,滿懷激情,對技術的追求近乎狂熱。然而,隨著歲月的流逝,生活的忙碌逐漸占據了我的大部分時間,讓我無暇顧及技術的沉澱與積累。 十年間,我經歷了職業生涯的起伏和變遷。從初出茅廬的菜鳥到逐漸嶄露頭角的開發者,我見證了 ...
  • C# 是一種簡單、現代、面向對象和類型安全的編程語言。.NET 是由 Microsoft 創建的開發平臺,平臺包含了語言規範、工具、運行,支持開發各種應用,如Web、移動、桌面等。.NET框架有多個實現,如.NET Framework、.NET Core(及後續的.NET 5+版本),以及社區版本M... ...
  • 前言 本文介紹瞭如何使用三菱提供的MX Component插件實現對三菱PLC軟元件數據的讀寫,記錄了使用電腦模擬,模擬PLC,直至完成測試的詳細流程,並重點介紹了在這個過程中的易錯點,供參考。 用到的軟體: 1. PLC開發編程環境GX Works2,GX Works2下載鏈接 https:// ...
  • 前言 整理這個官方翻譯的系列,原因是網上大部分的 tomcat 版本比較舊,此版本為 v11 最新的版本。 開源項目 從零手寫實現 tomcat minicat 別稱【嗅虎】心有猛虎,輕嗅薔薇。 系列文章 web server apache tomcat11-01-官方文檔入門介紹 web serv ...
  • 1、jQuery介紹 jQuery是什麼 jQuery是一個快速、簡潔的JavaScript框架,是繼Prototype之後又一個優秀的JavaScript代碼庫(或JavaScript框架)。jQuery設計的宗旨是“write Less,Do More”,即倡導寫更少的代碼,做更多的事情。它封裝 ...
  • 前言 之前的文章把js引擎(aardio封裝庫) 微軟開源的js引擎(ChakraCore))寫好了,這篇文章整點js代碼來測一下bug。測試網站:https://fanyi.youdao.com/index.html#/ 逆向思路 逆向思路可以看有道翻譯js逆向(MD5加密,AES加密)附完整源碼 ...
  • 引言 現代的操作系統(Windows,Linux,Mac OS)等都可以同時打開多個軟體(任務),這些軟體在我們的感知上是同時運行的,例如我們可以一邊瀏覽網頁,一邊聽音樂。而CPU執行代碼同一時間只能執行一條,但即使我們的電腦是單核CPU也可以同時運行多個任務,如下圖所示,這是因為我們的 CPU 的 ...
  • 掌握使用Python進行文本英文統計的基本方法,並瞭解如何進一步優化和擴展這些方法,以應對更複雜的文本分析任務。 ...
  • 背景 Redis多數據源常見的場景: 分區數據處理:當數據量增長時,單個Redis實例可能無法處理所有的數據。通過使用多個Redis數據源,可以將數據分區存儲在不同的實例中,使得數據處理更加高效。 多租戶應用程式:對於多租戶應用程式,每個租戶可以擁有自己的Redis數據源,以確保數據隔離和安全性。 ...