js object对象赋值bug和对象复制clone方法
来源:互联网 发布:unity3d 官方demo 编辑:程序博客网 时间:2024/06/05 09:28
代码重现:
1 <script> 2 var obja = { 3 'apple':{'key':'apple','name':'苹果'}, 4 'banana':{'key':'banana','name':'香蕉'}, 5 }; 6 7 var objb = obja; 8 9 console.log(obja);10 delete(objb['apple']);11 console.log(obja);12 </script>
执行结果:
Object {apple: Object, banana: Object}
Object {banana: Object}
解决办法clone,生成一个新的对象,而不是对原对象的引用。
代码如下:
1 <script> 2 function clone(obj) { 3 var o; 4 if (typeof obj == "object") { 5 if (obj === null) { 6 o = null; 7 } else { 8 if (obj instanceof Array) { 9 o = [];10 for (var i = 0, len = obj.length; i < len; i++) {11 o.push(clone(obj[i]));12 }13 } else {14 o = {};15 for (var j in obj) {16 o[j] = clone(obj[j]);17 }18 }19 }20 } else {21 o = obj;22 }23 return o;24 }25 26 var obja = {27 'apple':{'key':'apple','name':'苹果'},28 'banana':{'key':'banana','name':'香蕉'},29 };30 31 var objb = clone(obja);32 33 console.log(obja);34 delete(objb['apple']);35 console.log(obja);36 </script>
执行结果:
Object {apple: Object, banana: Object}
Object {apple: Object, banana: Object}
纯文字:
最近在写程序的时候发现,如果新建一个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!
- js object对象赋值bug和对象复制clone方法
- JavaScript中的对象复制(Object Clone)
- 对象复制和对象赋值
- JS 对象复制Object.assign和Object.create
- ruby复制对象的方法(dup 和 clone)
- ruby复制对象的方法(dup 和 clone)
- js clone对象的方法
- Object对象的通用方法-clone
- Java Object对象之clone方法
- Java Object对象之clone方法
- Java Object对象之clone方法
- 对象的赋值和复制
- 复制js对象方法
- 对象复制和对象赋值的区别
- 对象复制和对象赋值的区别
- day58(5.8)object,clone(复制对象),arrlist
- 深复制,浅复制,和对象赋值
- Java Object的clone方法浅复制和深复制
- 我可能读了假书
- php实现单点登录实例
- php实现SSO单点登录实例
- Linux下批量Kill多个进程的方法
- mysql复制表结构create table as和like的区别
- js object对象赋值bug和对象复制clone方法
- 完美解决IE9浏览器出现的对象未定义问题
- php常量PHP_EOL
- Makefile学习(一)
- 数独求解程序 php版
- php取两个整数的最大公约数算法大全
- php 实现欧拉函数Euler
- Python自动化脚本【2】从sql文件中随机抽取条目
- 好玩的一句话签名