structuredClone 深拷贝的使用

前言

今天翻掘金的时候看到一个 深拷贝的使用structuredClone ,大脑直接宕机,这是啥,怎么没用过,问了一下AI发现是近年来新出的一个方法。

兼容性

在这里插入图片描述

使用

// 初始对象
let obj = {
    str: '111',
    num: 222,
    arr: [1, 2, 3],
    obj: { a: 1, b: 2 },
    // fun: function () { console.log('fun') },
    reg: /\d+/g,
    date: new Date(),
    und: undefined,
    nul: null,
    // sym: Symbol('sym'),
    set: new Set([1, 2, 3]),
    map: new Map([['a', 1], ['b', 2]]),
}
// 使用 structuredClone 进行深拷贝
let obj2 = structuredClone(obj);
console.log(obj, obj2);

是不是很简单,调用一下就行,功能也很强大,实测除了复制 FunctionSymbol 数据会报错,其他都没有问题

可选参数

主要用于指定 可转移对象(Transferable Objects) 的所有权转移。它的核心作用是在深拷贝过程中优化性能,尤其在处理大型二进制数据(如 ArrayBuffer)时,可以避免复制数据,直接转移数据的所有权。

// 原始对象
const original = {
    buffer: new ArrayBuffer(1024), // 1KB 的二进制数据
    name: "data"
};

// 使用 transfer 转移 ArrayBuffer 的所有权
const copy = structuredClone(original, {
    transfer: [original.buffer]
});

console.log(original.buffer.byteLength); // 0(原始 buffer 已被分离)
console.log(copy.buffer.byteLength);     // 1024(拷贝后的 buffer 可用)

参考链接

告别老套!structuredClone:新一代深拷贝神器,让JSON.parse和JSON.stringify靠边站!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值