前言
今天翻掘金的时候看到一个 深拷贝的使用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);
是不是很简单,调用一下就行,功能也很强大,实测除了复制 Function
和 Symbol
数据会报错,其他都没有问题
可选参数
主要用于指定 可转移对象(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靠边站!