值得庆幸的是structuredClone在所有主流浏览器中都受支持,也支持 Node.js 和 Deno。 结语 我们现在终于可以直接使用原生 JavaScript 中的structuredClone能力实现深度拷贝对象。每种方式都有其优缺点,具体使用方式取决于你的需求和目标对象的类型。
constobj={func:function(){return"I'm a function";},// 函数symbol:Symbol('uniqueSymbol'),// SymbolweakMap:newWeakMap(),// WeakMapweakSet:newWeakSet(),// WeakSetelement:document.createElement('div')// HTMLElement};// 尝试克隆对象try{constclonedObj=structuredClone(obj);console.log(clonedObj...
使用structuredClone() constoriginal = {name:"Alice",greet:() =>"Hello!",value:undefined};constclone =structuredClone(original);console.log(clone.greet);// undefinedconsole.log(clone.value);// undefined structuredClone()也不克隆函数,但保留了undefined值,使其比JSON.stringify()更可靠,适用于复杂对象。
console.log(uInt8Array.byteLength); // 0 总的来说,structuredClone()是 JavaScript 开发者工具箱中的一个宝贵补充,使对象克隆比以往任何时候都更容易。
structuredClone()创建了一个深拷贝,保留了结构,没有任何JSON.stringify()的限制,并能处理循环引用和undefined等复杂数据类型。 2. 循环引用 使用{...obj}处理循环引用 const original = { name: "Alice", self: null }; original.self = original; // 这将导致错误: ...
')}kitchenSink.circular = kitchenSink// ✅ 都支持,全部都深度赋值成功const clonedSink = structuredClone(kitchenSink)2. 为何不使用 spread 操作符 值得注意的是,文章正在谈论的是创建深层副本。如果只需要进行浅复制,即不复制嵌套对象或数组的副本,那么可以考虑 rest 符:const simpleEvent = { title: ...
在现代浏览器中,可以使用structuredClone方法来实现深拷贝,它是一种更高效、更安全的深拷贝方式。 以下是一个示例代码,演示如何使用structuredClone进行深拷贝: const kitchenSink = { set: new Set([1, 3, 3]), map: new Map([[1, 2]]), regex: /foo/, ...
没错,这个内置于 JavaScript 运行时的structuredClone函数就是这样: const calendarEvent = { title: "Builder.io大会", date: new Date(123), attendees: ["Steve"] } // 😍 const copied = structuredClone(calendarEvent) 您是否注意到在上面的例子中,我们不仅复制了对象,还复制了嵌套数组,甚至还包括Date...
structuredClone()创建了一个深拷贝,保留了结构,没有任何JSON.stringify()的限制,并能处理循环引用和undefined等复杂数据类型。 2. 循环引用 使用{...obj}处理循环引用 constoriginal = { name:"Alice", self:null }; original.self = original;// 这将导致错误: ...
在JavaScript 中,实现深拷贝的方式有很多种,每种方式都有其优点和缺点。今天介绍一种原生 JavaScript 提供的structuredClone实现深拷贝。 下面列举一些常见的方式,以及它们的代码示例和优缺点: 1. 使用 JSON.parse(JSON.stringify(obj)) 代码示例: function deepClone(obj) {return JSON.parse(JSON.stringify(obj))...