显然,您对声明的
var tempMyObj = myObj;功能有一些误解。
在Javascript中,对象是通过引用传递和分配的(更准确地说是引用的值),所以
tempMyObj和
myObj都是对同一对象的引用。
这是一个简化的插图,可以帮助您可视化正在发生的事情
// [Object1]<--------- myObjvar tempMyObj = myObj;// [Object1]<--------- myObj// ^ // |// ----------- tempMyObj
如您在分配后所看到的,两个引用都指向同一对象。
如果需要修改一个而不是另一个,则需要 创建一个副本 。
// [Object1]<--------- myObjconst tempMyObj = Object.assign({}, myObj);// [Object1]<--------- myObj// [Object2]<--------- tempMyObj旧答案:
这是创建对象副本的其他几种方法
由于您已经在使用jQuery:
var newObject = jQuery.extend(true, {}, myObj);使用香草Javascript
function clone(obj) { if (null == obj || "object" != typeof obj) return obj; var copy = obj.constructor(); for (var attr in obj) { if (obj.hasOwnProperty(attr)) copy[attr] = obj[attr]; } return copy;}var newObject = clone(myObj);


