AVt天堂网 手机版,亚洲va久久久噜噜噜久久4399,天天综合亚洲色在线精品,亚洲一级Av无码毛片久久精品

當前位置:首頁 > 科技  > 軟件

如何在JavaScript中復制一個對象?

來源: 責編: 時間:2024-04-11 08:58:22 137觀看
導讀JavaScript的原始數據類型是不可變的,這意味著一旦創建,它們的值就不能改變。但是,對象和數組是可變的,允許在創建后修改它們的值。實際上,這意味著原始數據是通過值傳遞的,而對象和數組是通過引用傳遞的??紤]以下例子:let

JavaScript的原始數據類型是不可變的,這意味著一旦創建,它們的值就不能改變。但是,對象和數組是可變的,允許在創建后修改它們的值。Ur728資訊網——每日最新資訊28at.com

實際上,這意味著原始數據是通過值傳遞的,而對象和數組是通過引用傳遞的。考慮以下例子:Ur728資訊網——每日最新資訊28at.com

let str = 'Hello';let copy = str;copy = 'Hi';// str = 'Hello', copy = 'Hi'let obj = { a: 1, b: 2 };let objCopy = obj;objCopy.b = 4;// obj = { a: 1, b: 4}, objCopy = { a: 1, b: 4 }

你可以看到,對象obj是通過引用傳遞給objCopy的。修改其中一個變量會影響另一個變量,因為它們都引用同一個對象。那我們如何解決這個問題呢?答案是克隆對象。Ur728資訊網——每日最新資訊28at.com

淺復制

使用展開運算符(...)或 Object.assign(),我們可以克隆對象并根據其屬性創建一個新對象。Ur728資訊網——每日最新資訊28at.com

const shallowClone = obj => Object.assign({}, obj);let obj = { a: 1, b: 2};let clone = shallowClone(obj);let otherClone = shallowClone(obj);clone.b = 4;otherClone.b = 6;// obj = { a: 1, b: 2}// clone = { a: 1, b: 4 }// otherClone = { a: 1, b: 6 }

這種技術被稱為淺復制,因為它適用于外部(淺層)對象,但如果我們有嵌套(深層)對象,則會失敗,因為這些對象最終會通過引用傳遞。這就引出了下一部分。Ur728資訊網——每日最新資訊28at.com

圖片圖片Ur728資訊網——每日最新資訊28at.com

深復制

為了創建一個對象的深復制,我們需要遞歸地克隆每一個嵌套對象,復制嵌套對象和數組。Ur728資訊網——每日最新資訊28at.com

網上有一些解決方案使用 JSON.stringify() 和 JSON.parse()。雖然這種方法在某些情況下可能有效,但它包含許多問題和性能問題,因此我建議不要使用它。Ur728資訊網——每日最新資訊28at.com

從邊界情況開始,我們需要檢查傳遞的對象是否為空,如果是,則返回 null。否則,我們可以使用 Object.assign() 和一個空對象 ({}) 來創建原始對象的淺復制。Ur728資訊網——每日最新資訊28at.com

然后,我們將使用 Object.keys() 和 Array.prototype.forEach() 來確定需要深復制哪些鍵值對。如果對象是一個數組,我們將設置克隆對象的長度與原對象相等,并使用 Array.from() 創建一個克隆對象。否則,我們將遞歸地調用函數,把當前值作為參數傳入。Ur728資訊網——每日最新資訊28at.com

深復制專用于簡單對象和數組。這意味著它無法處理類實例,函數和其他特殊情況。那么,我們如何處理這些情況呢?JavaScript最近給我們提供了一個新的工具來解決這個問題!Ur728資訊網——每日最新資訊28at.com

使用 structuredClone() 進行深復制

克隆顯然是一個很常見也很重要的問題。事實上,JavaScript引入了structuredClone()全局函數,可以用來深度克隆對象。而我們不需要實現復雜的遞歸函數,只需使用這個函數就可以克隆對象。Ur728資訊網——每日最新資訊28at.com

這種技術可用于數組和對象,代碼最少,是JavaScript中克隆對象的推薦方式,因為它性能最佳且最可靠。Ur728資訊網——每日最新資訊28at.com

本文鏈接:http://www.tebozhan.com/showinfo-26-82737-0.html如何在JavaScript中復制一個對象?

聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。郵件:2376512515@qq.com

上一篇: 通過 Atexit 模塊讓 Python 實現 Golang 的 defer 功能,你學會了嗎?

下一篇: 注意:Kafka 的這六個場景會丟失消息!

標簽:
  • 熱門焦點
  • 十個可以手動編寫的 JavaScript 數組 API

    JavaScript 中有很多API,使用得當,會很方便,省力不少。 你知道它的原理嗎? 今天這篇文章,我們將對它們進行一次小總結?,F在開始吧。1.forEach()forEach()用于遍歷數組接收一參
  • 騰訊VS網易,最卷游戲暑期檔,誰能笑到最后?

    作者:無銹缽來源:財經無忌7月16日晚,上海1862時尚藝術中心。伴隨著幻象的精準命中,碩大的熒幕之上,比分被定格在了14:12,被寄予厚望的EDG戰隊以絕對的優勢戰勝了BLG戰隊,拿下了總決
  • 大廠卷向扁平化

    來源:新熵作者丨南枝 編輯丨月見大廠職級不香了。俗話說,兵無常勢,水無常形,互聯網企業調整職級體系并不稀奇。7月13日,淘寶天貓集團啟動了近年來最大的人力制度改革,目前已形成一
  • 網紅炒股不為了賺錢,那就是耍流氓!

    來源:首席商業評論6月26日高調宣布入市,網絡名嘴大v胡錫進居然進軍了股市。在一次財經媒體峰會上,幾個財經圈媒體大佬就“胡錫進炒股是否知道認真報道”展開討論。有
  • 華為Mate 60系列用上可變靈動島:正式版體驗將會更出色

    這段時間以來,關于華為新旗艦的爆料日漸密集。據此前多方爆料,今年華為將開始恢復一年雙旗艦戰略,除上半年推出的P60系列外,往年下半年的Mate系列也將
  • OPPO K11搭載長壽版100W超級閃充:26分鐘充滿100%

    據此前官方宣布,OPPO將于7月25日也就是今天下午14:30舉辦新品發布會,屆時全新的OPPO K11將正式與大家見面,將主打旗艦影像,和同檔位競品相比,其最大的賣
  • 蘋果MacBook Pro 2021測試:仍不支持平滑滾動

    據10月30日9to5 Mac 消息報道,蘋果新的 14 英寸和 16 英寸 MacBook Pro 2021 上市后獲得了不錯的評價,亮點包括行業領先的性能,令人印象深刻的電池續航,精美豐
  • 電博會與軟博會實現"線下+云端"的雙線融合

    在本次“電博會”與“軟博會”雙展會利好條件的加持下,既可以發揮展會拉動人流、信息流、資金流實現快速交互流動的作用,繼而推動區域經濟良性發展;又可以聚
  • 利用職權私自解除被封帳號 Meta開除20多名員工

    11月18日消息,據外媒援引知情人士表示,過去一年時間內,Facebook母公司Meta解雇或處罰了20多名員工以及合同工,指控這些人通過內部系統以不當方式重置用戶帳號,其
Top