很明显,您对语句的var tempMyObj = myObj;
作用有一些误解。
在 JavaScript 中,对象是通过引用传递和分配的(更准确地说是引用的值),因此tempMyObj
和myObj
都是对同一对象的引用。
这是一个简化的插图,可以帮助您想象正在发生的事情
// [Object1]<--------- myObj
var tempMyObj = myObj;
// [Object1]<--------- myObj
// ^
// |
// ----------- tempMyObj
正如你在赋值之后看到的,两个引用都指向同一个对象。
如果您需要修改一个而不是另一个,则需要创建一个副本。
// [Object1]<--------- myObj
const 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);
看这里和这里