硬拷贝与浅拷贝javascript

时间:2016-11-05 01:23:08

标签: javascript

这可能是一个老问题,但我真的很好奇通过引用复制对象的性质作为javascript中的赋值。

意思是如果

var a = {}; 
var b = a;
a.name = "Renato";
console.log(b); 
Object {name: "renato"}

我是javascript的新手,这引起了我的注意,有一个浅拷贝作为对象赋值的默认值。我搜索了一下,为了创建一个硬拷贝,你必须创建一个mixin。我想知道为什么这被选为默认值,因为它的转换似乎非常含蓄。谢谢!

1 个答案:

答案 0 :(得分:22)

对象和数组被视为对同一对象的引用。如果要克隆对象,有几种方法可以执行此操作。

在以后的浏览器中,您可以执行以下操作:

var b = Object.assign({}, a);

如果你想去图书馆,lodash提供_.clone(以及_.cloneDeep):

var b = _.clone(a);

如果您不想执行这些方法中的任何一种,您只需枚举每个键和值并将它们分配给新对象。

通常,在通过多个函数等时将它们视为引用是有价值的。对于数字和字符串等基元来说,情况并非如此,因为在大多数情况下,这会感觉非常违反直觉。