我在 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 .
如有任何帮助,我们将不胜感激。 谢谢,最好!
最佳答案
将数组分配给变量不会创建副本。因此,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?
关于javascript - 卡住javascript中的变量值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26851874/