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

2w2cym1i  于 2023-08-04  发布在  Node.js
关注(0)|答案(1)|浏览(145)

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

const util = require('util');

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

字符串
我期待true,但收到false
你能解释一下原因吗?

q3aa0525

q3aa05251#

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

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对象

相关问题