首页 > javascrip数组、对象深度克隆出错?

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的,哪里错了呢?


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

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"

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


可以试试这样

JSON.parse(JSON.stringify(obj))
【热门文章】
【热门文章】