最近在写程序的时候发现,如果新建一个object对象objb,初始化值为obja,如果改变了objb对象的字段值,那么obja也会随之改变,看来对象赋值传递的是一个引用。
代码重现:
<script>
var obja = {
'apple':{'key':'apple','name':'苹果'},
'banana':{'key':'banana','name':'香蕉'},
};
var objb = obja;
console.log(obja);
delete(objb['apple']);
console.log(obja);
</script>
执行结果:
Object {apple: Object, banana: Object}
Object {banana: Object}
解决办法clone,生成一个新的对象,而不是对原对象的引用。
代码如下:
<script>
function clone(obj) {
var o;
if (typeof obj == "object") {
if (obj === null) {
o = null;
} else {
if (obj instanceof Array) {
o = [];
for (var i = 0, len = obj.length; i < len; i++) {
o.push(clone(obj[i]));
}
} else {
o = {};
for (var j in obj) {
o[j] = clone(obj[j]);
}
}
}
} else {
o = obj;
}
return o;
}
var obja = {
'apple':{'key':'apple','name':'苹果'},
'banana':{'key':'banana','name':'香蕉'},
};
var objb = clone(obja);
console.log(obja);
delete(objb['apple']);
console.log(obja);
</script>
执行结果:
Object {apple: Object, banana: Object}
Object {apple: Object, banana: Object}
done!
出处:www.l1mn.com
原文标题:js object对象赋值bug和对象复制clone方法
原文地址:https://www.l1mn.com/p/c12bb4.html
本文版权归作者所有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接。
Copyright © L1MN.COM 联系方式:l1mnfw@163.com