ES6(ES2015)で実装されたObject.assignでディープコピーできると思っていた時期が私にもあった。 Object.assignでディープコピーして(した気になって)、プロパティの値を変更したとき、元のオブジェクトにも影響していることに気づいた。 // Object.assign.js const obj1 = { hoge: 'hoge', fuga: { foo: 'foo' } }; // ディープコピーのつもり const obj2 = Object.assign({}, obj1); obj2.hoge = 'hogehoge'; // obj1.hoge: 'hoge' obj2.hoge: 'hogehoge' ← ディープコピーされてる? console.log('obj1.hoge:', obj1.hoge, 'obj2.hoge:', obj2.hoge)
![ES6のObject.assignがシャローコピーなのでディープコピーする方法を考える](https://cdn-ak-scissors.b.st-hatena.com/image/square/f92d2365327305e6a1ff56973860f30772dadbd8/height=288;version=1;width=512/https%3A%2F%2F1.bp.blogspot.com%2F-22tojCJGnCI%2FWSyhZT7d5PI%2FAAAAAAAAFyY%2FSe8WVEJkyGUg02nXqOL12bgnd5XIOUiTwCLcB%2Fw1200-h630-p-k-no-nu%2Fdeep-clone.png)