var a = {
q:1,
w:2,
e:3
}
function copyAndModify(oldObj, name, value) {
var newObj = oldObj;
newObj[name] = value;
return newObj;
}
var b = copyAndModify(a, 'q', 'q');
console.log(b);
function extend(to, from) {
for (var key in from) {
to[key] = from[key];
}
return to;
};
var a = {
q:1,
w:2,
e:3
};
var b = {};
extend(b, a);
a.q = 'q';
console.log(b.q)
JavaScript的变量分成引用类型和基本类型。对象是引用类型的值,所以对对象的操作实际是操作对象的引用而不是操作实际的对象。所以b = a其实另b指向了a同一份内存空间,因此a.q其实也改变了b的q,输出的应该是‘q’.
写了个函数,看看还不是你想要的:
DeepClone 是传统的做法,现在兴起的做法可以留意一下 Facebook 的 immutable.js,也有不少类似的。
有个笨办法是
更靠谱的是
_.clone和_.cloneDeep提问有一句怎么没看懂,“我的意思是让赋值的时候不是修改b所指向的地址,而是将b的值赋给a”,难道不是要把a的值赋给b吗?
百度一下深拷贝吧~~,感觉题主问的是这个