Копия возвращаемая structuredClone не равна оригиналу при сравнении через isDeepStrictEqual

Рейтинг: 0Ответов: 1Опубликовано: 13.07.2023

Имеется следующий код:

const util = require('util');

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

Я ожидаю получить в консоль true, но получаю false. В чем может быть причина?

Ответы

▲ 2Принят

Потому что клонирование не сохраняет прототипы, а isDeepStrictEqual их сравнивает.

В клоне copy.key это объект типа Object, а не A.

https://developer.mozilla.org/en-US/docs/Web/API/Web_Workers_API/Structured_clone_algorithm#things_that_dont_work_with_structured_clone

The prototype chain is not walked or duplicated.

https://nodejs.org/api/assert.html#assertdeepstrictequalactual-expected-message

[[Prototype]] of objects are compared using the === operator.