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

我不知道如何在 JS/TS 中創(chuàng)建深度克隆

開(kāi)發(fā) 前端
在JavaScript和TypeScript中實(shí)現(xiàn)無(wú)突變的深度克隆可能比想象的更復(fù)雜。展開(kāi)運(yùn)算符和Object.create()?雖然常用,但不適合深度克隆。JSON.parse(JSON.stringify())?對(duì)于簡(jiǎn)單對(duì)象是一個(gè)快速有效的解決方案,而lodash.deepClone則是處理復(fù)雜數(shù)據(jù)結(jié)構(gòu)的理想選擇。

在JavaScript和TypeScript開(kāi)發(fā)中,對(duì)象的深度克隆是一個(gè)常見(jiàn)但容易被誤解的話題。本文將探討幾種常用的克隆方法,揭示它們的局限性,并介紹真正有效的深度克隆技術(shù)。

常見(jiàn)誤區(qū):展開(kāi)運(yùn)算符和Object.create()

許多開(kāi)發(fā)者習(xí)慣使用展開(kāi)運(yùn)算符{...}或Object.create()來(lái)克隆對(duì)象,但這些方法實(shí)際上只能進(jìn)行淺拷貝。

展開(kāi)運(yùn)算符的局限性:

const original = { name: "John", address: { city: "New York" } };
const clone = { ...original };

clone.address.city = "Los Angeles";
console.log(original.address.city); // 輸出: "Los Angeles"

Object.create()的問(wèn)題:

const original = { name: "John", address: { city: "New York" } };
const clone = Object.create(original);

clone.address.city = "Chicago";
console.log(original.address.city); // 輸出: "Chicago"

這兩種方法都無(wú)法實(shí)現(xiàn)真正的深度克隆,因?yàn)樗鼈冎粡?fù)制了對(duì)象的頂層屬性。

JSON.parse(JSON.stringify()):簡(jiǎn)單而有效

對(duì)于簡(jiǎn)單對(duì)象,JSON.parse(JSON.stringify())是一個(gè)有效的深度克隆方法:

const original = { name: "John", address: { city: "New York" } };
const clone = JSON.parse(JSON.stringify(original));

clone.address.city = "San Francisco";
console.log(original.address.city); // 輸出: "New York"

然而,這種方法也有局限性。它無(wú)法處理函數(shù)、undefined、Infinity、NaN、正則表達(dá)式、Map和Set等復(fù)雜數(shù)據(jù)類型。

lodash.deepClone:全面而強(qiáng)大

對(duì)于需要處理復(fù)雜數(shù)據(jù)結(jié)構(gòu)的場(chǎng)景,lodash.deepClone是一個(gè)更全面的解決方案:

import _ from 'lodash';

const original = {
  name: "John",
  address: { city: "New York" },
  skills: new Set(["JavaScript", "TypeScript"]),
  greet: function() { console.log("Hello!"); }
};

const clone = _.cloneDeep(original);

clone.address.city = "Boston";
clone.skills.add("React");

console.log(original.address.city); // 輸出: "New York"
console.log(original.skills.has("React")); // 輸出: false

lodash.deepClone能夠正確處理嵌套對(duì)象、數(shù)組、函數(shù),以及特殊的數(shù)據(jù)結(jié)構(gòu)如Set和Map。

性能考慮

在性能方面,JSON.parse(JSON.stringify())通常對(duì)簡(jiǎn)單對(duì)象更快,而lodash.deepClone對(duì)復(fù)雜結(jié)構(gòu)更可靠但速度較慢。

// 性能測(cè)試示例
const simpleObject = { a: 1, b: 2, c: 3 };
const complexObject = { /* 復(fù)雜的嵌套結(jié)構(gòu) */ };

console.time('JSON Simple');
JSON.parse(JSON.stringify(simpleObject));
console.timeEnd('JSON Simple');

console.time('Lodash Simple');
_.cloneDeep(simpleObject);
console.timeEnd('Lodash Simple');

console.time('JSON Complex');
JSON.parse(JSON.stringify(complexObject));
console.timeEnd('JSON Complex');

console.time('Lodash Complex');
_.cloneDeep(complexObject);
console.timeEnd('Lodash Complex');

結(jié)論

在JavaScript和TypeScript中實(shí)現(xiàn)無(wú)突變的深度克隆可能比想象的更復(fù)雜。展開(kāi)運(yùn)算符和Object.create()雖然常用,但不適合深度克隆。JSON.parse(JSON.stringify())對(duì)于簡(jiǎn)單對(duì)象是一個(gè)快速有效的解決方案,而lodash.deepClone則是處理復(fù)雜數(shù)據(jù)結(jié)構(gòu)的理想選擇。

理解這些方法的優(yōu)缺點(diǎn)對(duì)于選擇合適的克隆策略至關(guān)重要。在實(shí)際開(kāi)發(fā)中,應(yīng)根據(jù)具體需求和數(shù)據(jù)結(jié)構(gòu)的復(fù)雜性來(lái)選擇適當(dāng)?shù)纳疃瓤寺》椒āMㄟ^(guò)掌握這些技巧,開(kāi)發(fā)者可以更有效地處理對(duì)象克隆,提高代碼的健壯性和可維護(hù)性。

責(zé)任編輯:武曉燕 來(lái)源: 大遷世界
相關(guān)推薦

2021-07-14 11:25:12

CSSPosition定位

2021-12-29 11:38:59

JS前端沙箱

2024-01-08 07:11:35

2020-07-16 08:32:16

JavaScript語(yǔ)言語(yǔ)句

2021-11-16 08:51:29

Node JavaScript變量類型

2024-02-05 11:55:41

Next.js開(kāi)發(fā)URL

2020-12-14 07:51:16

JS 技巧虛值

2020-07-28 08:26:34

WebSocket瀏覽器

2020-06-12 09:20:33

前端Blob字符串

2024-03-27 12:35:12

2011-09-15 17:10:41

2021-02-01 23:23:39

FiddlerCharlesWeb

2009-12-10 09:37:43

2020-12-21 09:00:04

MySQL緩存SQL

2022-10-13 11:48:37

Web共享機(jī)制操作系統(tǒng)

2010-08-23 09:56:09

Java性能監(jiān)控

2022-05-05 12:02:45

SCSS函數(shù)開(kāi)發(fā)

2023-01-13 16:48:48

前端開(kāi)發(fā)JavaScript

2018-06-20 00:30:06

2018-04-04 12:05:04

Postgre數(shù)據(jù)planner
點(diǎn)贊
收藏

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

主站蜘蛛池模板: 国产特黄一级 | 欧美一区二区免费 | 亚洲国产精品久久 | 国产精品久久久乱弄 | 波多野结衣先锋影音 | 国产一区二区三区久久 | h视频在线观看免费 | www成人免费视频 | www.毛片| 日本三级做a全过程在线观看 | 九热在线| 男人阁久久 | 天天干在线播放 | 国产不卡视频 | av在线一区二区三区 | 久久久久国产精品一区 | 亚洲精品日韩欧美 | 91精品国产综合久久小仙女图片 | 色狠狠一区 | 99热首页 | 中文字幕人成人 | 福利在线观看 | 亚洲欧美中文日韩在线v日本 | 天天干夜夜操 | 国产成人精品一区二区三区四区 | 亚洲欧美日本在线 | 国产一级片在线观看视频 | 亚洲欧美在线观看 | 在线一区| 亚洲精品电影 | 国产亚洲区 | 免费在线日韩 | 国产丝袜一区二区三区免费视频 | 久久99精品久久久 | 欧美综合一区二区 | 国产精品久久av | 高清国产一区二区 | 不卡一区| 在线日韩在线 | 羞羞视频免费在线观看 | 久久免费视频观看 |