javascript - javascrip数组、对象深度克隆出错?
巴扎黑
巴扎黑 2017-04-10 16:00:59
[JavaScript讨论组]
//定义克隆函数
function cloneObject(src) {
  var o = src instanceof Array ? [] : {};
  for(var k in src) 
    o[k] = typeof src[k] === Object ? cloneObject(src[k]) : src[k];
  return o;
}

//测试代码
var srcObj = {
    a: 1,
    b: {
        b1: ["hello", "hi"],
        b2: "JavaScript"
    }
};
var abObj = srcObj;
var tarObj = cloneObject(srcObj);

srcObj.a = 2;
srcObj.b.b1[0] = "Hello";

console.log(abObj.a);
console.log(abObj.b.b1[0]);

console.log(tarObj.a);      
console.log(tarObj.b.b1[0]); 

//调试结果
 2
 Hello
 1
 Hello

第二个Hello应该是小写h的,哪里错了呢?

巴扎黑
巴扎黑

全部回复(4)
怪我咯

object判断写错了,应该是"object",加引号的小写。

迷茫

你的数组克隆指直接赋值的吧。你的程序会走到下面一步:

tarObj['b1'] = typeof srcObj['b1'] === Object ? cloneObject(srcObj['b1])):srcObj['b1']

数组=数组,赋值过后新数组还是原数组的引用

迷茫

1,typeof variable ==="object",object小写
2,typeof 无法用来判断强类型,比如===“object”可能是dom节点,Date,RegExp等等,无法确定是json

       如果确定是json,需要用到object.prototype.toString.call(obj)==="object Object"
迷茫

可以试试这样

JSON.parse(JSON.stringify(obj))
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号