Object.assign()

https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Object/assign

说明

Object.assign()方法将所有可枚举属性的值从一个或多个源对象复制到目标对象,然后返回目标对象

语法

Object.assign(target,..sources);

参数

target:目标对象

sources:源对象

返回值

target:目标对象

例子:

1.使用Object.assgin()进行浅克隆

  //创建源对象
var source = {a:1};
//创建目标对象
var target = {};
//使用Object.assign进行复制
var copyObj = Object.assign(target,source); console.log("copyObj:"+JSON.stringify(copyObj)); //{a:1}
console.log("target===copyObj:"+(copyObj==target)); //true

从上面两个输出可以得到Object.assign方法的说明结论 。

1.assign进行了对象复制

2.返回对象既是目标对象

2.使用Object.assgin()+JSON进行深克隆

单纯使用Object.assgin()方法复制对象我们只能复制对象中的值属性,而对于对象中引用属性,我们只能复制其引用

    //创建源对象
var source = {a:1,b:{c:2}};
//创建目标对象
var target = {};
//使用Object.assign进行复制
var copyObj = Object.assign(target,source);
console.log("copyObj:"+JSON.stringify(copyObj)); //{"a":1,"b":{"c":2}}
console.log("target.b===copyObj.b:"+(source.b==copyObj.b)); //true

那么js该怎么实现深度克隆呢,我们可以使用JSON来实现

 //创建源对象
var source = {a:1,b:{c:2}};
//创建目标对象
var target = {};
//使用Object.assign进行浅复制
var copyObj = Object.assign(target,source);
//将copyObj序列成JSON字符串
var copyString = JSON.stringify(copyObj);
//然后再将其JSON字符串转换为对象,这样深度克隆
copyObj = eval('('+copyString+')');
console.log("copyObj:"+JSON.stringify(copyObj)); //{"a":1,"b":{"c":2}}
console.log("source.b===copyObj.b:"+(source.b==copyObj.b)); //false

上面我们可以看出实现方式是将其转化为JSON字符串,然后再转成对象,就可完成深度克隆

上一篇:别样的checkbox


下一篇:人人都是 DBA(VI)SQL Server 事务日志