在JavaScript中,“拷贝后赋值”通常指的是将一个变量的值复制到另一个变量中。这种操作在编程中非常常见,但也有一些细节需要注意,特别是涉及到对象和数组时。
当使用赋值操作符(=)来拷贝对象或数组时,可能会遇到意料之外的问题,因为这种拷贝只是浅拷贝,两个变量实际上指向同一个内存地址。这可能导致在一个变量上进行的修改意外地影响到另一个变量。
let arr1 = [1, 2, 3];
let arr2 = [...arr1];
Object.assign()
方法来创建一个新的对象副本。但请注意,这只适用于浅拷贝,如果对象内部还有嵌套对象,则这些嵌套对象仍然是共享的。let obj1 = { a: 1, b: { c: 2 } };
let obj2 = Object.assign({}, obj1);
下面是一个使用深拷贝的示例代码,利用 JSON.parse(JSON.stringify(obj))
方法:
let obj1 = { a: 1, b: { c: 2 } };
let obj2 = JSON.parse(JSON.stringify(obj1));
obj2.b.c = 3;
console.log(obj1.b.c); // 输出 2,因为 obj2.b 和 obj1.b 是完全独立的对象
console.log(obj2.b.c); // 输出 3
在这个示例中,obj2.b
是 obj1.b
的深拷贝,所以对 obj2.b.c
的修改不会影响到 obj1.b.c
。
领取专属 10元无门槛券
手把手带您无忧上云