Edited at

ES6でオブジェクトのコピー

More than 3 years have passed since last update.

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という関数を使ってコピーが出来るようになったみたい。

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()を使った方がいいケースがあったりとかあるみたいなので今度詳しく調べる!