为何使用structuredClone()复制对象后与原对象深层严格不相等?
问题原因解析
首先,structuredClone() 复制自定义类实例时,会丢失原对象的原型链信息,把自定义实例转换成普通的 JavaScript 对象。
看你的代码:
obj.key是new A()创建的实例,它的原型指向A.prototype,属于自定义类型A的实例。- 经过
structuredClone()复制后,copy.key会变成一个和原实例属性完全相同的普通对象,但它的原型是Object.prototype,不再是A的实例。
而 util.isDeepStrictEqual() 做深层严格比较时,会检查两个对象的原型是否一致。因为 obj.key 和 copy.key 的原型链不同,所以整个对象的深层严格相等判断返回 false。
你可以自己验证这一点:
console.log(obj.key instanceof A); // 输出 true console.log(copy.key instanceof A); // 输出 false console.log(Object.getPrototypeOf(obj.key) === A.prototype); // true console.log(Object.getPrototypeOf(copy.key) === A.prototype); // false
内容的提问来源于stack exchange,提问作者Bakuard
相关产品推荐
相关产品推荐

