Object.assign()
Posted 莫问今朝
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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字符串,然后再转成对象,就可完成深度克隆
以上是关于Object.assign()的主要内容,如果未能解决你的问题,请参考以下文章
使用 Object.assign 和 class/extends 有啥区别?
使用 Firebase 更新文档字段时使用 Object.assign