JS对象复制/克隆

161 阅读1分钟

因为 js 对象是地址引用,所以,当把一个对象赋值给目标对象,改变目标对象的属性也会改变原对象的属性。

方法一:Object.assign(target, source)

  • 复制对象
var userInfo = {
    name: 'golden',
    age: 20
};
var cloneUserInfo = Object.assign({},userInfo);

cloneUserInfo.weight = 120;

console.log(userInfo)//{"name":"golden","age":20}

console.log(cloneUserInfo);//{"name":"golden","age":20,"weight":120}
  • 复制数组
var list = [1,2,3];
var cloneList = Object.assign([],list);
cloneList.push(4);
console.log(list, cloneList) // [1,2,3],[1,2,3,4]

方法二:es6 的展开运算符 ...

var list = [1,2,3];
var cloneList = [...list];

方法三:JSON对象序列化方法。

弊端:函数不能被复制

var obj = {
    a:1,
    b:2,
    fn(){
        return '函数'
    }
}  
var newObj = JSON.parse(JSON.stringify(obj)); 
newObj.c = 3;
console.log(obj,newObj);// {a:1,b:2,fn:fn()},{a:1,b:2,c:3}
// 此处的 newObj 未成功获取到fn属性。