因为对象的值都是引用,当按照下面的方法复制时:
var obj = {'name':'Tom','age':12} var copyObj = obj
obj和copyObj都是同一个基对象的引用,因此改变的值都是基对象的值:
copyObj.age = 15
console.log(obj.age) ------>15
希望copyObj的改变不影响obj则需要创建一个obj的副本:
if (Array.isArray(obj)) { //如果对象是一个数组,那么利用数组的slice或concat方法 copyObj = obj.slice() // copyObj = obj.concat() }else{ //如果对象不是数组 copyObj = new Object() //1.第一种方法:遍历对象,挨个复制 for(var key in obj){ copyObj[key] = obj[key] } //2.第二种方法:将对象序列化再解析回来(注意:如果对象中有function不能正确复制) copyObj = JSON.parse(JSON.stringify(obj)) }