首页 >社区问答列表 >javascript - javascrip数组、对象深度克隆出错?

javascript - javascrip数组、对象深度克隆出错?

//定义克隆函数
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的,哪里错了呢?

  • 迷茫
  • 迷茫    2017-04-10 16:02:593楼

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

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

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

    +0添加回复

  • 回复
  • 迷茫
  • 迷茫    2017-04-10 16:02:592楼

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

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

    +0添加回复

  • 回复