https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Object/assign
针对深度拷贝,需要使用其他方法
JSON.parse(JSON.stringify(obj));
,因为 Object.assign() 拷贝的是属性值。 假如源对象的属性值是一个指向对象的引用,它也只拷贝那个引用值。
function test() {
let a = { b: {c:4} , d: { e: {f:1}} };
let g = Object.assign({},a);
let h = JSON.parse(JSON.stringify(a));
console.log(g.d); // { e: { f: 1 } }
g.d.e = 32;
console.log('g.d.e set to 32.')
// g.d.e set to 32.
console.log(g); // { b: { c: 4 }, d: { e: 32 } }
console.log(a); // { b: { c: 4 }, d: { e: 32 } }
console.log(h);
// { b: { c: 4 }, d: { e: { f: 1 } } }
h.d.e = 54;
console.log('h.d.e set to 54.') ;
// h.d.e set to 54.
console.log(g); // { b: { c: 4 }, d: { e: 32 } }
console.log(a); // { b: { c: 4 }, d: { e: 32 } }
console.log(h);
// { b: { c: 4 }, d: { e: 54 } }
}
test();
Object.prototype.hasOwnProperty()
https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Object/hasOwnProperty
https://stackoverflow.com/questions/728360/how-do-i-correctly-clone-a-javascript-object
http://www.mavenspun.com/javascript/learn-programming/how-to-deep-copy-clone-javascript-object-or-complex-data-structure.htm
http://www.mavenspun.com/javascript/learn-programming/how-to-build-graph-using-html5-canvas-and-json.htm
http://www.mavenspun.com/javascript/learn-programming/how-to-create-javascript-vector-hexagon-with-canvas-html5.htm
http://www.mavenspun.com/javascript/learn-programming/how-to-create-javascript-vector-hexagon.htm
http://blog.soulserv.net/understanding-object-cloning-in-javascript-part-i/
https://github.com/cronvel
http://www.zsoltnagy.eu/cloning-objects-in-javascript/
http://www.zsoltnagy.eu/es6-in-practice