成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

如何在JavaScript中復(fù)制一個(gè)對(duì)象?

開(kāi)發(fā) 前端
深復(fù)制專(zhuān)用于簡(jiǎn)單對(duì)象和數(shù)組。這意味著它無(wú)法處理類(lèi)實(shí)例,函數(shù)和其他特殊情況。那么,我們?nèi)绾翁幚磉@些情況呢?JavaScript最近給我們提供了一個(gè)新的工具來(lái)解決這個(gè)問(wèn)題!

JavaScript的原始數(shù)據(jù)類(lèi)型是不可變的,這意味著一旦創(chuàng)建,它們的值就不能改變。但是,對(duì)象和數(shù)組是可變的,允許在創(chuàng)建后修改它們的值。

實(shí)際上,這意味著原始數(shù)據(jù)是通過(guò)值傳遞的,而對(duì)象和數(shù)組是通過(guò)引用傳遞的。考慮以下例子:

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 }

你可以看到,對(duì)象obj是通過(guò)引用傳遞給objCopy的。修改其中一個(gè)變量會(huì)影響另一個(gè)變量,因?yàn)樗鼈兌家猛粋€(gè)對(duì)象。那我們?nèi)绾谓鉀Q這個(gè)問(wèn)題呢?答案是克隆對(duì)象。

淺復(fù)制

使用展開(kāi)運(yùn)算符(...)或 Object.assign(),我們可以克隆對(duì)象并根據(jù)其屬性創(chuàng)建一個(gè)新對(duì)象。

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 }

這種技術(shù)被稱(chēng)為淺復(fù)制,因?yàn)樗m用于外部(淺層)對(duì)象,但如果我們有嵌套(深層)對(duì)象,則會(huì)失敗,因?yàn)檫@些對(duì)象最終會(huì)通過(guò)引用傳遞。這就引出了下一部分。

圖片圖片

深復(fù)制

為了創(chuàng)建一個(gè)對(duì)象的深復(fù)制,我們需要遞歸地克隆每一個(gè)嵌套對(duì)象,復(fù)制嵌套對(duì)象和數(shù)組。

網(wǎng)上有一些解決方案使用 JSON.stringify() 和 JSON.parse()。雖然這種方法在某些情況下可能有效,但它包含許多問(wèn)題和性能問(wèn)題,因此我建議不要使用它。

從邊界情況開(kāi)始,我們需要檢查傳遞的對(duì)象是否為空,如果是,則返回 null。否則,我們可以使用 Object.assign() 和一個(gè)空對(duì)象 ({}) 來(lái)創(chuàng)建原始對(duì)象的淺復(fù)制。

然后,我們將使用 Object.keys() 和 Array.prototype.forEach() 來(lái)確定需要深復(fù)制哪些鍵值對(duì)。如果對(duì)象是一個(gè)數(shù)組,我們將設(shè)置克隆對(duì)象的長(zhǎng)度與原對(duì)象相等,并使用 Array.from() 創(chuàng)建一個(gè)克隆對(duì)象。否則,我們將遞歸地調(diào)用函數(shù),把當(dāng)前值作為參數(shù)傳入。

深復(fù)制專(zhuān)用于簡(jiǎn)單對(duì)象和數(shù)組。這意味著它無(wú)法處理類(lèi)實(shí)例,函數(shù)和其他特殊情況。那么,我們?nèi)绾翁幚磉@些情況呢?JavaScript最近給我們提供了一個(gè)新的工具來(lái)解決這個(gè)問(wèn)題!

使用 structuredClone() 進(jìn)行深復(fù)制

克隆顯然是一個(gè)很常見(jiàn)也很重要的問(wèn)題。事實(shí)上,JavaScript引入了structuredClone()全局函數(shù),可以用來(lái)深度克隆對(duì)象。而我們不需要實(shí)現(xiàn)復(fù)雜的遞歸函數(shù),只需使用這個(gè)函數(shù)就可以克隆對(duì)象。

這種技術(shù)可用于數(shù)組和對(duì)象,代碼最少,是JavaScript中克隆對(duì)象的推薦方式,因?yàn)樗阅茏罴亚易羁煽俊?/p>

責(zé)任編輯:武曉燕 來(lái)源: 路條編程
相關(guān)推薦

2019-09-10 09:12:54

2016-12-07 17:45:44

Linux文件

2015-07-06 09:59:56

JavaScript私有成員

2017-02-10 20:00:17

Linux共享目錄命令

2020-11-26 08:12:24

JavaScript對(duì)象數(shù)組

2019-08-23 10:42:00

Linux復(fù)制文檔

2021-09-14 12:34:33

LinuxLinux終端

2021-02-15 17:29:46

LinuxShell腳本

2018-12-09 14:20:05

LinuxPDF移除密碼

2023-04-26 15:19:36

JavaScripMap數(shù)組

2021-07-02 07:18:19

Goresults通道類(lèi)型

2018-09-08 09:05:00

UbuntuLinuxIP地址

2018-11-12 10:30:03

CentOSLinux倉(cāng)庫(kù)

2022-11-03 08:13:52

echo 命令Linux

2021-03-11 23:43:20

JavaScript數(shù)組開(kāi)發(fā)

2021-03-18 10:45:02

JavaScript數(shù)組運(yùn)算符

2022-09-07 10:20:05

Python裝飾類(lèi)

2019-04-23 15:20:26

JavaScript對(duì)象前端

2020-09-02 07:22:17

JavaScript插件框架

2016-11-22 19:37:54

Linux恢復(fù)文件
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)

主站蜘蛛池模板: 午夜影院在线观看免费 | 人人看人人草 | 91福利网址| 中文字幕视频在线观看免费 | 日本三级在线网站 | 国产原创在线观看 | av影音资源| 亚洲免费视频网站 | 亚洲一区二区三区免费视频 | 欧美无乱码久久久免费午夜一区 | 日日噜噜夜夜爽爽狠狠 | 日韩欧美专区 | 超碰精品在线观看 | www97影院 | 伊人手机在线视频 | 欧美9999| 久久精品一区二区三区四区 | 久久高清| 亚洲综合色 | 自拍偷拍精品 | 久久综合一区二区三区 | 欧美一区2区三区3区公司 | 久久免费看 | 成人午夜影院 | 羞羞的视频在线观看 | 久久精品国产一区二区电影 | 久久精品一 | 在线不卡一区 | 亚洲一区二区精品视频 | 91国产在线播放 | 国产精品久久久久久亚洲调教 | 日本中文字幕在线视频 | 久久久高清 | av网站观看 | 在线免费观看黄色网址 | 日本a网站| 97精品一区二区 | 欧洲精品一区 | 人妖无码| 成人片免费看 | 在线一区视频 |