//定义克隆函数
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))