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

StructuredClone():JavaScript中深拷貝對象的最簡單方法

開發(fā) 前端
我們總是不得不依賴第三方庫來進行深度復制并保留循環(huán)引用。現在,這一切都因新的structuredClone()而改變了——它是一種簡單高效的方法,可以深度復制任何對象。

深拷貝是傳遞或存儲數據時的一項常規(guī)編程任務。

  • 淺拷貝:只復制對象的第一層
  • 深拷貝:復制對象的所有層級
const obj = { name: 'Tari', friends: [{ name: 'Messi' }] };

const shallowCopy = { ...obj };

const deepCopy = dCopy(obj);

console.log(obj.friends === shallowCopy.friends); // ? true

console.log(obj.friends === deepCopy.friends); // ? false

但一直以來,我們都沒有一種內置的方法來完美地深度復制對象,這一直是一個痛點。

我們總是不得不依賴第三方庫來進行深度復制并保留循環(huán)引用。

現在,這一切都因新的structuredClone()而改變了——它是一種簡單高效的方法,可以深度復制任何對象。

const obj = { name: 'Tari', friends: [{ name: 'Messi' }] };

const clonedObj = structuredClone(obj);

console.log(obj.name === clonedObj); // false
console.log(obj.friends === clonedObj.friends); // false

輕松克隆循環(huán)引用:

const car = {
  make: 'Toyota',
};

// ?? 循環(huán)引用
car.basedOn = car;

const cloned = structuredClone(car);

console.log(car.basedOn === cloned.basedOn); // false

// ?? 循環(huán)引用被克隆
console.log(car === car.basedOn); // true

這是你永遠無法用JSON stringify/parse技巧實現的:

想深入多少層都可以:

// ??
const obj = {
  a: {
    b: {
      c: {
        d: {
          e: 'Coding Beauty',
        },
      },
    },
  },
};

const clone = structuredClone(obj);

console.log(clone.a.b.c.d === obj.a.b.c.d); // false
console.log(clone.a.b.c.d.e); // Coding Beauty

你應該知道的限制

structuredClone()非常強大,但它有一些你應該了解的重要弱點:

無法克隆函數或方法

這是因為它使用的特殊算法。

無法克隆DOM元素

<input id="text-field" />
const input = document.getElementById('text-field');

const inputClone = structuredClone(input);

console.log(inputClone);

不保留RegExp的lastIndex屬性

我是說,沒人會去克隆正則表達式,但這是值得注意的一點:

const regex = /beauty/g;
const str = 'Coding Beauty: JS problems are solved at Coding Beauty';

console.log(regex.index);
console.log(regex.lastIndex); // 7

const regexClone = structuredClone(regex);
console.log(regexClone.lastIndex); // 0

其他限制

了解這些限制很重要,以避免使用該函數時出現意外行為。

部分克隆,部分移動

這是一個更復雜的情況。

你將內部對象從源對象轉移到克隆對象,而不是復制。

這意味著源對象中沒有留下任何可以改變的東西:

const uInt8Array = Uint8Array.from(
    { length: 1024 * 1024 * 16 },
    (v, i) => i
);

const transferred = structuredClone(uInt8Array, {
    transfer: [uInt8Array.buffer],
});

console.log(uInt8Array.byteLength); // 0

總的來說,structuredClone()是JavaScript開發(fā)者工具箱中的一個寶貴補充,使對象克隆比以往任何時候都更容易。

責任編輯:姜華 來源: 大遷世界
相關推薦

2024-05-08 08:32:25

架構

2024-03-04 08:45:30

JavaScript深度拷貝對象

2023-05-08 09:00:46

JSON深拷貝對象

2021-07-16 12:33:24

Javascript深拷貝淺拷貝

2025-04-27 09:45:58

JavaScript深拷貝淺拷貝

2017-05-24 11:54:55

Javascript深拷貝

2020-10-12 08:35:22

JavaScript

2023-05-17 07:36:00

淺拷貝深拷貝對象

2018-09-26 14:37:17

JavaScript前端編程語言

2018-05-10 14:20:18

前端JavaScript深拷貝

2021-04-07 10:12:05

Javascript對象拷貝開發(fā)

2011-03-14 15:42:57

Oracle數據庫遷移復制

2021-04-09 10:58:51

UbuntuLinuxWindows 10

2025-04-17 08:05:00

JavaScript

2022-10-24 07:55:31

2020-07-16 15:20:37

MatplotlibPython可視化

2009-02-05 14:48:51

跳出循環(huán)多層循環(huán)編程

2013-07-16 14:44:43

Ubuntutftp服務器

2011-02-17 11:19:24

Linux Live

2025-05-21 04:00:00

JavaScript前端
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 久久精品成人 | 免费永久av| 中文字字幕在线中文乱码范文 | 欧美精品网站 | 久久99精品久久久久婷婷 | 国产传媒在线观看 | 色香婷婷 | 日韩免费1区二区电影 | 国产精品国产自产拍高清 | 一区二区在线不卡 | 国产一区二区三区视频在线观看 | www.com久久久| www.欧美.com | 在线一区观看 | 在线黄av | 精品熟人一区二区三区四区 | 午夜精品网站 | 欧美videosex性极品hd | 日韩视频在线一区二区 | 午夜亚洲 | 欧洲妇女成人淫片aaa视频 | 精品一二三 | 91精品久久久久久久久 | 96国产精品久久久久aⅴ四区 | 国产精品久久久久久久久久久久久久 | 美女艹b| 黄视频免费在线 | 欧美激情欧美激情在线五月 | 国产一区在线免费 | 日韩免费看视频 | 密色视频| 精品一级电影 | 国产一区二区精品在线 | 亚洲国产一区二区三区在线观看 | 国产成人综合一区二区三区 | 国产成人99久久亚洲综合精品 | 亚洲欧美激情精品一区二区 | 日批日韩在线观看 | 一片毛片| 成人精品一区 | 一区二区精品视频 |