Shi*_*ora 40 javascript object deep-copy shallow-copy
我刚刚遇到了这个概念
var copy = Object.assign({}, originalObject);
Run Code Online (Sandbox Code Playgroud)
它会将原始对象的副本创建到" copy"对象中.但是,我的问题是,这种克隆对象的方式是创建深拷贝还是浅拷贝?
PS:令人困惑的是,如果它创建了一个深层副本,那么它将是克隆一个对象的最简单方法.
Ram*_*lfc 34
忘记深拷贝,即使浅拷贝也不安全,如果你要复制的对象有一个enumerable属性设置为false的属性.
MDN:
Object.assign()方法仅将可枚举和自己的属性从源对象复制到目标对象
举个例子
var o = {};
Object.defineProperty(o,'x',{enumerable: false,value : 15});
var ob={};
Object.assign(ob,o);
console.log(o.x); // 15
console.log(ob.x); // undefined
Run Code Online (Sandbox Code Playgroud)
小智 19
通过使用Object.assign(),您实际上正在对您的对象进行浅层复制.每当我们执行一个操作,比如将一个对象分配给其他对象时,我们实际上执行浅层复制,即如果OBJ1是一个对象,则通过另一个OBJ2对象修改它也将反映OBJ1中的更改.
其他答案很复杂。
有些人根本不回答这个问题。
下面为我工作
// orignal object with deep keys
var originalObject = {
k1: "v1",
k2: "v2",
deepObj: {
k3: "v3",
k4: "v4"
}
};
// make copies now
var copy1 = JSON.parse(JSON.stringify(originalObject));
var copy2 = JSON.parse(JSON.stringify(originalObject));
Run Code Online (Sandbox Code Playgroud)
希望有帮助。
对于小Data structures我,我看到JSON.stringify()并且JSON.parse()工作得很好.
// store as JSON
var copyOfWindowLocation = JSON.stringify(window.location)
console.log("JSON structure - copy:", copyOfWindowLocation)
// convert back to Javascript Object
copyOfWindowLocation = JSON.parse(copyOfWindowLocation)
console.log("Javascript structure - copy:", copyOfWindowLocation)
Run Code Online (Sandbox Code Playgroud)