ES6ではObject.assign()でオブジェクトのコピーができるようになったのでメモ。
これまでのオブジェクトのコピー
普通に代入しただけではコピーされない。(jsをやられている方はご存知かとは思いますが。。。)
sampe
var obj = {a: '1'};
var obj1 = obj;
obj.b = '2';
console.log(obj1);
// => { a: '1', b: '2' }
console.log(obj);
// => 期待値としては {a: '1'}だが実際には { a: '1', b: '2' }となる
これを避けるためには、これまではライブラリ(jqueryやlodashなど)を使ってオブジェクトをコピーしていた。
ES6でのオブジェクトのコピー
ES6ではObject.assignという関数を使ってコピーが出来るようになったみたい。
これを使うと...
es6
let obj = {a: '1'};
let obj1 = Object.assign({}, obj);
obj.b = '2';
console.log(obj1);
// => { a: '1' }
console.log(obj);
// => { a: '1', b: '2' }
期待どおりの結果になった!
とりあえず、今回はここまで。
ドキュメントを見ると、Object.assign()でマージできたり、ケースによってはObject.getOwnPropertyDescriptor()とかObject.defineProperty()を使った方がいいケースがあったりとかあるみたいなので今度詳しく調べる!