我在javascript中在特定时间保存变量值时遇到问题。在基本级别,在下面的代码中,我希望变量' b'保持分配的值
var a = [];
var b = '';
var c = 'value';
a.push(c);
b = a;
console.log(b); // b = ["value"]
a.push(c);
console.log(b); // b = ["value", "value"], but i want it to be just ["value"]
我已经看到使用闭包的类似问题的各种解决方案,例如:Intentionally "freezing" a javascript variable using a self-executing function。我在这个Jsbin中试过这个解决方案失败了:http://jsbin.com/zusara/1/edit?js,console。
非常感谢任何帮助。 谢谢,最好!
答案 0 :(得分:3)
将数组分配给变量不会复制。因此,a
和b
变量都指向同一个数组,通过任一变量进行的任何更改都将显示在另一个变量中。
如果你想在Javascript中复制一个数组,那么你必须明确地复制一个数组。
var a = [];
var c = 'value';
a.push(c);
// make shallow copy of a into b
var b = a.slice(0);
b
现在包含一个完全独立的数组,a
的修改不会影响b
。
注意:这是浅拷贝,不是深拷贝,是阵列的解决方案。浅拷贝不会复制数组中的对象或这些对象中的对象。进行深层复制需要更多代码,但通常不是必需的,在您提供的示例中似乎不需要。
如果你想要一个深层拷贝,并且想要包含对象,那么不仅仅是数组(我为数组的浅层副本提供了简单的解决方案),你可以看到这个参考有很多选项和辩论:
What is the most efficient way to deep clone an object in JavaScript?
答案 1 :(得分:1)
实现此目的的一种方法是使用切片功能。
而不是: b = a;
尝试使用:
b = a.slice();