在javascript中的原始对象中修改

在javascript中的原始对象中修改,javascript,object,Javascript,Object,我在变量“c”中定义了一个对象。我还创建了一个函数,其中传递了一个对象。当我改变那个变量时,它也改变了原始对象,但我关心的是为什么下面给出的语句不能处理那个对象 要按值传递它,需要先克隆它 在中,您将找到这样做的选项。有很多方法可以做到这一点,每种方法都有优点和缺点。取决于你想从你的对象中得到什么,你可以选择一个 最短的方法是将对象字符串化为JSON并再次解析。(请注意,您不能在该对象中保存函数): 与您的 如果在项目中使用jquery,还可以使用“jquery方式”: “当传入一个基本类型变量

我在变量“c”中定义了一个对象。我还创建了一个函数,其中传递了一个对象。当我改变那个变量时,它也改变了原始对象,但我关心的是为什么下面给出的语句不能处理那个对象

要按值传递它,需要先克隆它

在中,您将找到这样做的选项。有很多方法可以做到这一点,每种方法都有优点和缺点。取决于你想从你的对象中得到什么,你可以选择一个

最短的方法是将对象字符串化为JSON并再次解析。(请注意,您不能在该对象中保存函数):

与您的

如果在项目中使用jquery,还可以使用“jquery方式”:


“当传入一个基本类型变量(如字符串或数字)时,该值是按值传入的。这意味着在函数中对该变量所做的任何更改都与函数外部发生的任何更改完全不同。”-您具体询问的是哪条语句?你说“不工作”是什么意思?你预计会发生什么?如果我们在该对象中添加键3,那么它就在那里,但当我们将整个新对象指定给“z”时,它就不工作了。你用
x
y
做什么?它们似乎毫无用处。我想我已经找到了答案
function changeParam(x, y, z) {
  x = 3;
  y = "new string";
  z["key2"] = "new";
  z["key3"] = "newer";

  z = {"new" : "object"};
}

var a = 1,
    b = "something",
    c = {"key1" : "whatever", "key2" : "original value"};
var m=c;
changeParam(a, b, c);

console.log(c)
console.log(m)
var newObject = JSON.parse(JSON.stringify(oldObject));
var newObject =  jQuery.extend(true, {}, oldObject);