国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

記錄--Object.assign 這算是深拷貝嗎

這篇具有很好參考價(jià)值的文章主要介紹了記錄--Object.assign 這算是深拷貝嗎。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問(wèn)。

這里給大家分享我在網(wǎng)上總結(jié)出來(lái)的一些知識(shí),希望對(duì)大家有所幫助

記錄--Object.assign 這算是深拷貝嗎

在JavaScript中,Object.assign() 是一個(gè)用于合并對(duì)象屬性的常見(jiàn)方法。然而,對(duì)于許多開(kāi)發(fā)者來(lái)說(shuō),關(guān)于它是否執(zhí)行深拷貝的認(rèn)識(shí)可能存在一些混淆。先說(shuō)答案Object.assign() 不屬于深拷貝,我們接著往下看。

Object.assign() 概覽

首先,讓我們回顧一下 Object.assign() 的基本用法。該方法用于將一個(gè)或多個(gè)源對(duì)象的屬性復(fù)制到目標(biāo)對(duì)象,并返回目標(biāo)對(duì)象。這一過(guò)程是淺拷貝的,即對(duì)于嵌套對(duì)象或數(shù)組,只是拷貝了引用而非創(chuàng)建新的對(duì)象。

const obj = { a: 1, b: { c: 2 } };
const obj2 = { d: 3 };

const mergedObj = Object.assign({}, obj, obj2);

console.log(mergedObj);
// 輸出: { a: 1, b: { c: 2 }, d: 3 }

淺拷貝的陷阱

淺拷貝的特性意味著如果源對(duì)象中包含對(duì)象或數(shù)組,那么它們的引用將被復(fù)制到新的對(duì)象中。這可能導(dǎo)致問(wèn)題,尤其是在修改新對(duì)象時(shí),原始對(duì)象也會(huì)受到影響。

const obj = { a: 1, b: { c: 2 } };
const clonedObj = Object.assign({}, obj);
clonedObj.b.c = 3;

console.log(obj);         // { a: 1, b: { c: 3 } }
console.log(clonedObj);   // { a: 1, b: { c: 3 } }

在這個(gè)例子中,修改 clonedObj 的屬性也會(huì)影響到原始對(duì)象 obj。

因此,如果我們需要?jiǎng)?chuàng)建一個(gè)全新且獨(dú)立于原始對(duì)象的拷貝,我們就需要進(jìn)行深拷貝。而 Object.assign() 并不提供深拷貝的功能。

深拷貝的需求

如果你需要進(jìn)行深拷貝而不僅僅是淺拷貝,就需要使用其他的方法,如使用遞歸或第三方庫(kù)來(lái)實(shí)現(xiàn)深度復(fù)制。以下是幾種常見(jiàn)的深拷貝方法:

1. 使用 JSON 序列化和反序列化

const obj = { a: 1, b: { c: 2 } };
const deepClonedObj = JSON.parse(JSON.stringify(obj));
deepClonedObj.b.c = 3;

console.log(obj);            // { a: 1, b: { c: 2 } }
console.log(deepClonedObj);  // { a: 1, b: { c: 3 } }

這種方法利用了 JSON 的序列化反序列化過(guò)程,通過(guò)將對(duì)象轉(zhuǎn)換為字符串,然后再將字符串轉(zhuǎn)換回對(duì)象,實(shí)現(xiàn)了一個(gè)全新的深拷貝對(duì)象。

需要注意的是,這種方法有一些限制,例如無(wú)法處理包含循環(huán)引用的對(duì)象,以及一些特殊對(duì)象(如 RegExp 對(duì)象)可能在序列化和反序列化過(guò)程中失去信息。

2. 使用遞歸實(shí)現(xiàn)深拷貝

function deepClone(obj) {
  if (obj === null || typeof obj !== 'object') {
    return obj;
  }

  const clonedObj = Array.isArray(obj) ? [] : {};

  for (let key in obj) {
    if (obj.hasOwnProperty(key)) {
      clonedObj[key] = deepClone(obj[key]);
    }
  }

  return clonedObj;
}

const obj = { a: 1, b: { c: 2 } };
const deepClonedObj = deepClone(obj);
deepClonedObj.b.c = 3;

console.log(obj);            // { a: 1, b: { c: 2 } }
console.log(deepClonedObj);  // { a: 1, b: { c: 3 } }

這是一個(gè)遞歸實(shí)現(xiàn)深拷貝的方法。它會(huì)遞歸地遍歷對(duì)象的屬性,并創(chuàng)建它們的副本。這種方法相對(duì)靈活,可以處理各種情況。

但需要注意在處理大型對(duì)象或深度嵌套的對(duì)象時(shí)可能會(huì)導(dǎo)致棧溢出。

3. 使用第三方庫(kù)

許多第三方庫(kù)提供了強(qiáng)大而靈活的深拷貝功能,其中最常用的是 lodash 庫(kù)中的 _.cloneDeep 方法。

const _ = require('lodash');

const obj = { a: 1, b: { c: 2 } };
const deepClonedObj = _.cloneDeep(obj);
deepClonedObj.b.c = 3;

console.log(obj);            // { a: 1, b: { c: 2 } }
console.log(deepClonedObj);  // { a: 1, b: { c: 3 } }

使用第三方庫(kù)的優(yōu)勢(shì)在于它們通常經(jīng)過(guò)精心設(shè)計(jì)和測(cè)試,可以處理更多的邊界情況,并提供更好的性能。

本文轉(zhuǎn)載于:

https://juejin.cn/post/7325040809697591296

如果對(duì)您有所幫助,歡迎您點(diǎn)個(gè)關(guān)注,我會(huì)定時(shí)更新技術(shù)文檔,大家一起討論學(xué)習(xí),一起進(jìn)步。

?記錄--Object.assign 這算是深拷貝嗎文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-801739.html

到了這里,關(guān)于記錄--Object.assign 這算是深拷貝嗎的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來(lái)自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 【ES6】 JavaScript 中的Object.assign

    Object.assign() 是 JavaScript 中的一個(gè)方法,它用于復(fù)制源對(duì)象的所有可枚舉屬性到目標(biāo)對(duì)象。該方法會(huì)返回目標(biāo)對(duì)象。 這是其基本用法: 在這個(gè)例子中,source 對(duì)象的所有可枚舉屬性都被復(fù)制到了 target 對(duì)象。 需要注意的是,Object.assign() 是淺復(fù)制(shallow copy),意味著如果源對(duì)

    2024年02月10日
    瀏覽(21)
  • 在JavaScript中,Object.assign()方法或展開(kāi)語(yǔ)法(...)來(lái)合并對(duì)象,Object.freeze()方法來(lái)凍結(jié)對(duì)象,防止對(duì)象被修改

    一、Object.freeze()方法來(lái)凍結(jié)對(duì)象,防止對(duì)象被修改 Object.freeze() 是JavaScript中的一個(gè)方法,用于凍結(jié)一個(gè)對(duì)象。被凍結(jié)的對(duì)象不能再被修改。具體來(lái)說(shuō),它做了兩件事情: 防止添加新的屬性:嘗試添加新屬性將失敗,不會(huì)拋出錯(cuò)誤,但新屬性不會(huì)被添加到對(duì)象中。 防止刪除屬

    2024年02月02日
    瀏覽(29)
  • 【Python】成功解決TypeError: ‘tuple‘ object does not support item assignment

    【Python】成功解決TypeError: ‘tuple‘ object does not support item assignment

    【Python】成功解決TypeError: ‘tuple’ object does not support item assignment ?? 個(gè)人主頁(yè):高斯小哥 ?? 高質(zhì)量專(zhuān)欄:Matplotlib之旅:零基礎(chǔ)精通數(shù)據(jù)可視化、Python基礎(chǔ)【高質(zhì)量合集】、PyTorch零基礎(chǔ)入門(mén)教程?? 希望得到您的訂閱和支持~ ?? 創(chuàng)作高質(zhì)量博文(平均質(zhì)量分92+),分享更多關(guān)

    2024年03月15日
    瀏覽(35)
  • 認(rèn)識(shí)Object類(lèi)和深淺拷貝

    認(rèn)識(shí)Object類(lèi)和深淺拷貝

    本文介紹了Object類(lèi)以及Object類(lèi)部分方法,toString方法,equals和hashCode方法(重寫(xiě)前和重寫(xiě)后的對(duì)比),getClass方法,clone方法,以及拷貝新對(duì)象時(shí)會(huì)出現(xiàn)的深淺拷貝, 內(nèi)容較長(zhǎng),耗時(shí)一天,建議收藏后觀看~ Object類(lèi)是Java默認(rèn)提供的一個(gè)類(lèi)。而這個(gè)類(lèi)是Java里所有類(lèi)的頂級(jí)父類(lèi),即在繼承體系下

    2023年04月20日
    瀏覽(18)
  • 分享一個(gè)500頁(yè)面給大家

    分享一個(gè)500頁(yè)面給大家

    先看效果: 再看代碼:

    2024年02月06日
    瀏覽(25)
  • 分享一個(gè)403界面給大家

    分享一個(gè)403界面給大家

    先看效果圖(說(shuō)明:小鬼影會(huì)飄來(lái)飄去,長(zhǎng)時(shí)間停留會(huì)有小驚喜,具體大家跑一下就知道): 代碼如下: PS:發(fā)現(xiàn)我用文字寫(xiě)太生硬了,干的噎嗓子,干脆在代碼里加注釋了。

    2024年02月06日
    瀏覽(25)
  • 分享三個(gè)ai寫(xiě)作生成器給大家

    分享三個(gè)ai寫(xiě)作生成器給大家

    在當(dāng)今數(shù)字化時(shí)代,隨著人工智能的快速發(fā)展,ai寫(xiě)作軟件已經(jīng)成為越來(lái)越多人關(guān)注的熱門(mén)話題。這些創(chuàng)新的軟件利用機(jī)器學(xué)習(xí)和自然語(yǔ)言處理等技術(shù),能夠生成一些好的文章、博客、新聞稿甚至小說(shuō)等內(nèi)容,大大地提升了寫(xiě)作的效率和質(zhì)量。然而,面對(duì)眾多的ai寫(xiě)作軟件選擇

    2024年02月16日
    瀏覽(26)
  • 這幾個(gè)ai寫(xiě)作生成器分享給大家

    這幾個(gè)ai寫(xiě)作生成器分享給大家

    大家知道嗎,現(xiàn)在市場(chǎng)有許多ai寫(xiě)作軟件,它們已經(jīng)能夠模仿人類(lèi)的寫(xiě)作風(fēng)格,幫大家輕松地生成文章。我對(duì)于非常感興趣,于是就上網(wǎng)查了一下有可以ai寫(xiě)作的軟件嗎?結(jié)果真的找到幾款不錯(cuò)的軟件,今天借這個(gè)機(jī)會(huì)我將它們分享給你。 以下是今天分享的ai寫(xiě)作軟件 一:A

    2024年02月15日
    瀏覽(64)
  • 必做的高收益自媒體平臺(tái),分享給大家

    必做的高收益自媒體平臺(tái),分享給大家

    現(xiàn)在市面上的自媒體平臺(tái)是非常多的,大大小小加起來(lái)也有30好幾個(gè),但是要說(shuō)到哪些平臺(tái)收益比較高,那就不得不提到下面這個(gè)幾個(gè)主流平臺(tái),今天就給大家分享一下收益比較高的幾個(gè)主流平臺(tái)。 第一個(gè):百家號(hào) 百家號(hào)平臺(tái)目前的收益單價(jià)在眾多自媒體平臺(tái)來(lái)說(shuō)真的算是非

    2024年02月12日
    瀏覽(20)
  • 微軟文字轉(zhuǎn)語(yǔ)音不能試用了,分享三個(gè)方法給大家!

    微軟文字轉(zhuǎn)語(yǔ)音不能試用了,分享三個(gè)方法給大家!

    最近很多小伙伴告訴我,微軟文字轉(zhuǎn)語(yǔ)音不能在線試用了,這是因?yàn)槲④涥P(guān)閉了官方的使用頁(yè)面,所以現(xiàn)在不能直接使用微軟的網(wǎng)頁(yè)版進(jìn)行文字轉(zhuǎn)語(yǔ)音了。 那么我們還有沒(méi)有更好的方法去“白嫖”微軟的文字轉(zhuǎn)語(yǔ)音呢? 答案是肯定的,今天再給大家分享三個(gè)可以白嫖微軟文

    2024年02月11日
    瀏覽(19)

覺(jué)得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包