在这种情况下,谁能解释为什么obj
返回{a:2}
而不是{a:1}
的原因?
var obj = {a:1};
var data = {b:obj};
data.b.a = 2;
console.log(obj); // {a:2}
最佳答案
javascript中的对象是按引用进行的,因此,当您更改一个引用时,便会更改它们。意思是您刚刚创建了一个浅表副本,需要做一个深层克隆。
可以使用jQuery通过以下方式进行深层复制:
// Deep copy
var newObject = jQuery.extend(true, {}, obj);
读一下为什么我使用jQuery:
What is the most efficient way to deep clone an object in JavaScript?
(这里是John Resig的Stackoverflow ...)