我有一个全局JSON变量,我存储了一些参数,然后每次运行我希望能够修改它们的函数,但只是在函数内部进行修改。
因此,每次运行该函数时,我都希望在本地变量中获得全局变量的新副本。
问题是我将全局变量复制到函数中定义的本地变量,并且我对局部变量进行了更改,但是下次运行该函数时,而是拥有全局变量的完整副本,我有一个我已经修改过的东西。
谢谢! :)
var test = {"name":"me"};
function bla() {
var t=test;
t.name="you";
t.age=55;
alert(test.name); // Returns "you" that have been set locally instead of "me" that was global value.
}
bla();
答案 0 :(得分:2)
在
之后,通过引用分配对象var t=test;
变量t
和test
指的是同一个对象。您需要复制对象以获取您正在寻找的行为。由于您正在使用JSON,您可以序列化原始对象,然后重新解析为新变量
var t = JSON.parse(JSON.stringify(test));
然后根据需要修改新对象
答案 1 :(得分:2)
var t = test
不会创建对象的副本。它只是用另一个名称引用同一个对象。如果您希望复制对象,请考虑使用jQuery的$.extend()
函数:
var t = $.extend({}, test);
在该主题上,数组的等效代码如下:
var t = test.slice(0);
答案 2 :(得分:2)
在你的行上
var t=test;
您不是复制 test
的内容,而是创建对相同内容的新引用。因此,对t内容的任何修改也会修改测试。
答案 3 :(得分:1)
要将任意对象复制到另一个变量,请使用类似这样的原型函数:
Object.prototype.clone = function() {
var newObj = (this instanceof Array) ? [] : {};
for (i in this) {
if (i == 'clone') continue;
if (this[i] && typeof this[i] == "object") {
newObj[i] = this[i].clone();
} else newObj[i] = this[i]
} return newObj;
};
用法:
var bar = foo.clone();
答案 4 :(得分:1)
您需要克隆该对象,以便您可以修改克隆并保留原始内容... What is the most efficient way to deep clone an object in JavaScript?