Javascript取消绑定变量
我有以下代码,复制变量值,然后更改其值Javascript取消绑定变量,javascript,arrays,Javascript,Arrays,我有以下代码,复制变量值,然后更改其值 vara=[{name:'johndoe'}]; var b=a; document.write(b[0].name+''); document.write(a[0].name+''); b[0]。名称='Jane Doe'; document.write(b[0].name+''); document.write(a[0].name+'')您只是将a-引用分配给b。您可能要做的是复制数组,以便a的更改不会反映到b。有关JavaScript中的不同分配,
vara=[{name:'johndoe'}];
var b=a;
document.write(b[0].name+'
');
document.write(a[0].name+'
');
b[0]。名称='Jane Doe';
document.write(b[0].name+'
');
document.write(a[0].name+'
')代码>您只是将a
-引用分配给b
。您可能要做的是复制数组,以便a
的更改不会反映到b
。有关JavaScript中的不同分配,请参见
再看一看。这是关于不同数组复制方法的速度。
快速回答是:
var b = a.slice();
slice()
方法使用与原始数组相同的元素创建一个新数组。但要小心,这只是一个小问题
您还可以使用JSON.stringify()
和JSON.parse()
方法进行深度复制。您必须深度克隆a
,一种方法是var b=JSON.parse(JSON.stringify(a))
通过引用将变量a的可能副本传递给b。由于a和b具有相同的引用,因此每当您更改其中一个上的任何内容时,它也会更改另一个。为了防止这种情况发生,您需要将a深度复制到b上,复制所有单独的属性。对象(包括数组)在JavaScript中通过引用分配。如果需要维护两个独立的.name
值,则必须手动复制它们。很抱歉,如果重复,我在搜索之前的答案时不知道正确的术语:(