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

我不知道如何在 JS/TS 中創建深度克隆

開發 前端
在JavaScript和TypeScript中實現無突變的深度克隆可能比想象的更復雜。展開運算符和Object.create()?雖然常用,但不適合深度克隆。JSON.parse(JSON.stringify())?對于簡單對象是一個快速有效的解決方案,而lodash.deepClone則是處理復雜數據結構的理想選擇。

在JavaScript和TypeScript開發中,對象的深度克隆是一個常見但容易被誤解的話題。本文將探討幾種常用的克隆方法,揭示它們的局限性,并介紹真正有效的深度克隆技術。

常見誤區:展開運算符和Object.create()

許多開發者習慣使用展開運算符{...}或Object.create()來克隆對象,但這些方法實際上只能進行淺拷貝。

展開運算符的局限性:

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()的問題:

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

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

這兩種方法都無法實現真正的深度克隆,因為它們只復制了對象的頂層屬性。

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

對于簡單對象,JSON.parse(JSON.stringify())是一個有效的深度克隆方法:

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"

然而,這種方法也有局限性。它無法處理函數、undefined、Infinity、NaN、正則表達式、Map和Set等復雜數據類型。

lodash.deepClone:全面而強大

對于需要處理復雜數據結構的場景,lodash.deepClone是一個更全面的解決方案:

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能夠正確處理嵌套對象、數組、函數,以及特殊的數據結構如Set和Map。

性能考慮

在性能方面,JSON.parse(JSON.stringify())通常對簡單對象更快,而lodash.deepClone對復雜結構更可靠但速度較慢。

// 性能測試示例
const simpleObject = { a: 1, b: 2, c: 3 };
const complexObject = { /* 復雜的嵌套結構 */ };

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');

結論

在JavaScript和TypeScript中實現無突變的深度克隆可能比想象的更復雜。展開運算符和Object.create()雖然常用,但不適合深度克隆。JSON.parse(JSON.stringify())對于簡單對象是一個快速有效的解決方案,而lodash.deepClone則是處理復雜數據結構的理想選擇。

理解這些方法的優缺點對于選擇合適的克隆策略至關重要。在實際開發中,應根據具體需求和數據結構的復雜性來選擇適當的深度克隆方法。通過掌握這些技巧,開發者可以更有效地處理對象克隆,提高代碼的健壯性和可維護性。

責任編輯:武曉燕 來源: 大遷世界
相關推薦

2021-07-14 11:25:12

CSSPosition定位

2021-12-29 11:38:59

JS前端沙箱

2020-07-16 08:32:16

JavaScript語言語句

2024-01-08 07:11:35

2021-11-16 08:51:29

Node JavaScript變量類型

2024-02-05 11:55:41

Next.js開發URL

2020-12-14 07:51:16

JS 技巧虛值

2020-06-12 09:20:33

前端Blob字符串

2020-07-28 08:26:34

WebSocket瀏覽器

2010-08-23 09:56:09

Java性能監控

2024-03-27 12:35:12

2022-05-05 12:02:45

SCSS函數開發

2011-09-15 17:10:41

2021-02-01 23:23:39

FiddlerCharlesWeb

2022-10-13 11:48:37

Web共享機制操作系統

2009-12-10 09:37:43

2020-12-21 09:00:04

MySQL緩存SQL

2023-01-13 16:48:48

前端開發JavaScript

2018-04-04 12:05:04

Postgre數據planner

2021-03-18 10:45:02

JavaScript數組運算符
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 中文字幕一区二区三区精彩视频 | 九九九视频精品 | 国产成人精品a视频一区www | 欧美激情精品久久久久久变态 | 亚洲精品电影网在线观看 | 日韩高清一区 | 黄色毛片免费视频 | 在线观看成人免费视频 | 国产精品久久欧美久久一区 | 精品久久久久久久久久 | 特黄小视频 | 伊人精品一区二区三区 | 精品一区精品二区 | h视频在线播放 | 久操福利 | 国产激情视频在线 | 国产精品久久久久久久久久久久久 | 99re视频在线免费观看 | www成人免费视频 | 女女爱爱视频 | 日韩看片 | 日韩在线播放一区 | 日韩欧美视频 | 国产一区二区三区在线 | 亚洲成人动漫在线观看 | 人人草天天草 | 国产精品美女在线观看 | 中国一级特黄真人毛片免费观看 | 亚洲日韩中文字幕一区 | 精品色 | 99精品热视频 | 欧美理论片在线 | 久久婷婷国产麻豆91 | 一区亚洲 | 亚洲91精品 | 亚洲精品一区在线 | 久久婷婷麻豆国产91天堂 | 91久久国产综合久久91精品网站 | 国产99热在线 | 日本二区在线观看 | 国产成人福利在线观看 |