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方法复制或合并对象
Object.assign() 方法可以把任意多个的源对象自身的可枚举属性拷贝给目标对象,然后返回目标对象 var obj = { a: 1 }; var copy = Object.assign({ ...
- Object.assign()方法
对象的扩展 1.ES6中,对象的属性和方法可简写:对象的属性值可不写,前提是属性名已经声明: var name = "zhangsan"; "; var obj = { ...
- 微信不支持Object.assign
微信不支持Object.assign,让我Vue怎么用QAQ... 解决方法: https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Refe ...
- object.assign()方法的使用
地址:https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Object/assign
- [Javascript] Object.assign()
Best Pratices for Object.assign: http://www.cnblogs.com/Answer1215/p/5096746.html Object.assign() ca ...
- [Redux] Avoiding Object Mutations with Object.assign() and ...spread
Learn how to use Object.assign() and the spread operator proposed for ES7 to avoid mutating objects. ...
- [ES6] Object.assign (with defaults value object)
function spinner(target, options = {}){ let defaults = { message: "Please wait", spinningS ...
- 学习Object.assign()
Object.assign()用于将所有可枚举的值从一个或多个源对象复制到目标对象.它将返回目标对象. 语法 Object.assign(target, ...source); var obj = { ...
- es6 Object.assign
ES6 Object.assign 一.基本用法 Object.assign方法用来将源对象(source)的所有可枚举属性,复制到目标对象(target).它至少需要两个对象作为参数,第一个参数是目 ...
随机推荐
- [转载] Java并发编程:Callable、Future和FutureTask
转载自http://www.cnblogs.com/dolphin0520/p/3949310.html 在前面的文章中我们讲述了创建线程的2种方式,一种是直接继承Thread,另外一种就是实现Run ...
- spring4+srpingmvc+mybatis基本框架(app后台框架搭建一)
前言: 随着spring 越来越强大,用spring4来搭建框架也是很快速,问题是你是对spring了解有多深入.如果你是新手,那么在搭建的过程中可以遇到各种各样奇葩的问题. SSM框架的搭建是作为我 ...
- RibbonForm使用技巧
Ribbon右侧显示Logo 方法 重写RibbonControl的Paint事件 效果 代码 private void _ribbonControl_Paint(object sender, Pai ...
- Go基础之--位操作中你所不知道的用法
之前一直忽略的就是所有语言中关于位操作,觉得用处并不多,可能用到也非常简单的用法,但是其实一直忽略的是它们的用处还是非常大的,下面先回顾一下位操作符的基础 位操作符 与操作:&1 & ...
- php中foreach中使用&的办法
刚开始在使用foreach时候一直不理解为什么要使用& 后来发现在给一个数组里面添加数据时候很好用 <?phpheader("Content-Type:text/html;ch ...
- 中文编程语言之Z语言初尝试: ZLOGO 4
原文: https://zhuanlan.zhihu.com/p/31505895. 作者为本人. @TKT2016 开发的Z语言(ZLOGO是它的一个部分)是本人至今看到的唯一一个仍活跃开发的开源且 ...
- 使用SpringBoot开发REST服务
本文介绍如何基于Spring Boot搭建一个简易的REST服务框架,以及如何通过自定义注解实现Rest服务鉴权 搭建框架 pom.xml 首先,引入相关依赖,数据库使用mongodb,同时使用red ...
- numpy中关于*和dot的区别
1.numpy乘法运算中"*"是数组元素逐个计算 >>> import numpy as np >>> a = np.array([[2,3], ...
- JAVA8新特性(一)
default拓展方法 java8为接口声明添加非抽象方法的实现,也成为拓展方法. public interface Formula { void doSomething(); default voi ...
- centOS 搭建pipelineDB docs
#下载docs git clone https://github.com/pipelinedb/docs.git #安装python-sphinx &python-dev yum instal ...