通过 structuredClone() 接收的对象副本不等于原始副本

The object copy received via structuredClone() is not equal to the original

提问人:Bakuard 提问时间:7/13/2023 最后编辑:Penny LiuBakuard 更新时间:7/28/2023 访问量:122

问:

我尝试创建一个对象的副本,然后将其与原始对象进行比较。structuredClone()

const util = require('util');

function A() {}
let obj = {
    key: new A()
};
let copy = structuredClone(obj);
console.log(util.isDeepStrictEqual(obj, copy));

我期望,但收到了.truefalse

你能解释一下原因吗?

JavaScript node.js 深拷贝

答:

2赞 Pipe 7/13/2023 #1

原因是无法克隆类或函数,因此您的 A {} 在克隆对象中变为 {}。structuredClone

例:

const util = require('util');

function A(){ this.property = 8}
let obj = {
    key: new A()
};

let copy = structuredClone(obj);
console.log("Obj is:", obj)
console.log("Copy is:", copy)

这表明:

Obj is: { key: A { property: 8 } }
Copy is: { key: { property: 8 } }

正如你所看到的,副本不再是 A 实例......是一个普通的 Javascript 对象