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()的更多相关文章

  1. Object.assign方法复制或合并对象

    Object.assign() 方法可以把任意多个的源对象自身的可枚举属性拷贝给目标对象,然后返回目标对象 var obj = { a: 1 }; var copy = Object.assign({ ...

  2. Object.assign()方法

    对象的扩展 1.ES6中,对象的属性和方法可简写:对象的属性值可不写,前提是属性名已经声明: var name = "zhangsan"; "; var obj = { ...

  3. 微信不支持Object.assign

    微信不支持Object.assign,让我Vue怎么用QAQ... 解决方法: https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Refe ...

  4. object.assign()方法的使用

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

  5. [Javascript] Object.assign()

    Best Pratices for Object.assign: http://www.cnblogs.com/Answer1215/p/5096746.html Object.assign() ca ...

  6. [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. ...

  7. [ES6] Object.assign (with defaults value object)

    function spinner(target, options = {}){ let defaults = { message: "Please wait", spinningS ...

  8. 学习Object.assign()

    Object.assign()用于将所有可枚举的值从一个或多个源对象复制到目标对象.它将返回目标对象. 语法 Object.assign(target, ...source); var obj = { ...

  9. es6 Object.assign

    ES6 Object.assign 一.基本用法 Object.assign方法用来将源对象(source)的所有可枚举属性,复制到目标对象(target).它至少需要两个对象作为参数,第一个参数是目 ...

随机推荐

  1. RabbitMQ之发布订阅

    工作队列中,每个任务之分发给一个工作者.如果需要分发一个消息给多个消费者,这种模式被称为“发布/订阅” 交换器(Exchanges) RabbitMQ完整的消息模型 发布者(producer)是发布消 ...

  2. 【转】RAID 简介

    原文:http://wiki.dzsc.com/info/4972.html RAID 的英文全称为 Redundant Array of Inexpensive(或 Independent) Dis ...

  3. 深度学习的异构加速技术(一):AI 需要一个多大的“心脏”?

    欢迎大家前往腾讯云社区,获取更多腾讯海量技术实践干货哦~ 作者:kevinxiaoyu,高级研究员,隶属腾讯TEG-架构平台部,主要研究方向为深度学习异构计算与硬件加速.FPGA云.高速视觉感知等方向 ...

  4. Java 浏览器兼容模式

    现在设计的东西,很多浏览器不兼容.下面贴出代码.测试在360和IE浏览器下,可以兼容的 <!doctype html><html><head>    <met ...

  5. Luogu P1073 最优贸易

    题目描述 C 国有 n 个大城市和 m 条道路,每条道路连接这 n 个城市中的某两个城市.任意两个城市之间最多只有一条道路直接相连.这 m 条道路中有一部分为单向通行的道路,一部分为双向通行的道路,双 ...

  6. 《java.util.concurrent 包源码阅读》28 Phaser 第二部分

    这一部分来分析Phaser关于线程等待的实现.所谓线程等待Phaser的当前phase结束并转到下一个phase的过程.Phaser提供了三个方法: // 不可中断,没有超时的版本 public in ...

  7. anaconda spyder异常如何重新启动

    电脑有一次断电,重新启动后anaconda的spyder就打不开了 重新启动spyder方法: 在anaconda安装目录的Scripts文件夹下,shift+右键在此窗口打开命令行,运行spyder ...

  8. 理解defineProperty以及getter、setter

    我们常听说vue是用getter与setter实现数据监控的,那么getter与setter到底是什么东西,它与defineProperty是什么关系,平时有哪些用处呢?本文将为大家一一道来. 对象的 ...

  9. 排列oj

    835:排列 总时间限制: 5000ms 内存限制: 65536kB 描述 题目描述: 大家知道,给出正整数n,则1到n这n个数可以构成n!种排列,把这些排列按照从小到大的顺序(字典顺序)列出,如n= ...

  10. centos7.0安装教程

    CentOS(Community Enterprise Operating System,中文意思是:社区企业操作系统)是Linux发行版之一,它是来自于Red Hat Enterprise Linu ...