Так, не пишите тесты глубокой ночью ) Одна загадка с утра раскрылась, но стало ещё веселей. Действительно, для
Но вот что интересно, при увеличении
Можете сами попробовать
В данном случае у меня на 13-й итерации (зависит от версии v8) мапы уже не равны.
gist чтобы погонять spread https://gist.github.com/melikhov-dev/51f92e84b7aa9456a4cdba0550130df7
structuredClone
и Object.assign
я в цикле не выходил из мономорфности, потому что стрелял клонами, они имеют между собой одинаковую мапу
const objToCopy1 = { a: 1, b: 2 };
const objToCopy2 = { a: 1, b: 2 };
const N = 100;
for (let i = 0; i < N; i++) {
testFunction1(JSON.parse(JSON.stringify(objToCopy1)));
testFunction1(JSON.parse(JSON.stringify(objToCopy2)));
testFunction2({...objToCopy1})
testFunction2({...objToCopy2})
testFunction3(structuredClone(objToCopy1))
testFunction3(structuredClone(objToCopy2))
}
Но вот что интересно, при увеличении
N
testFunction2 падает в деоптимизацию, %HaveSameMap({...objToCopy1}, {...objToCopy2})
вываливается в false
.Можете сами попробовать
const objToCopy1 = { a: 1, b: 2 };
const objToCopy2 = { a: 1, b: 2 };
const N = 13;
for (let i = 0; i < N; i++) {
console.log(%HaveSameMap({...objToCopy1}, {...objToCopy2}))
}
В данном случае у меня на 13-й итерации (зависит от версии v8) мапы уже не равны.
gist чтобы погонять spread https://gist.github.com/melikhov-dev/51f92e84b7aa9456a4cdba0550130df7