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. SDRAM操作说明

    SDRAM是做嵌入式系统中,常用是的缓存数据的器件.基本概念如下(注意区分几个主要常见存储器之间的差异): SDRAM(Synchronous Dynamic Random Access Memory ...

  2. configure配置脚本的使用

    Linux下软件的安装一般由3个步骤组成: ./configure --host=arm-linux ... //配置 make //编译 make install //安装 若取消编译: make ...

  3. IMDB TOP 250爬虫

    这个小学期Python大作业搞了个获取IMDB TOP 250电影全部信息的爬虫.第二次写爬虫,比在暑假集训时写的熟练多了.欢迎大家评论. ''' ************************** ...

  4. 撸起袖子加油干 golang入坑系列

    还是提醒一下,里面有段子,不都是技术. 冲着技术来的,慢走不送.没有版权,但可以给我发邮件(ztao8607@gmail.com) 在我的发小朋友中,终于最后一位打光棍的要结婚了. 说实话,真心不容易 ...

  5. c语言的流程控制

    1. 流程控制 ● 顺序结构:默认的流程结构.按照书写顺序执行每一条语句. ● 选择结构:对给定的条件进行判断,再根据判断结果来决定执行哪一段代码. ● 循环结构:在给定条件成立的情况下,反复执行某一 ...

  6. 计算生日是星期几-soj

    编写一个程序,只要输入年月日,就能回答那天是星期几. 输入一个日期,包括年.月.日.(一组测试数据) 输出这个日期是星期几. 输入: 1 1 1 2 1 1 2006 7 10 输出: Monday ...

  7. Numpy入门 - 生成数组

    今天是Numpy入门系列教程第一讲,首先是安装Numpy: $ pip install numpy numpy是高性能科学计算和数据分析的基础包,本节主要介绍生成连续二维数组.随机二维数组和自定义二维 ...

  8. 【Win 10 应用开发】将墨迹保存到图像的两种方法

    IT界最近这几年,各种乱七八糟的东西不断出现,其中能用在实际工作与生活中的,大概也就那么几个.Web 前端也冒出各种框架,这就为那些喜欢乱用框架的公司提供了很好的机会,于是造成很多项目体积越来越庞大, ...

  9. dij洛谷电车

    //Gang #include<iostream> #include<cstring> #include<algorithm> #include<cstdio ...

  10. php综合运用技术

    五.PHP综合应用 1.写出下列服务的用途和默认端口(新浪网技术部) ftp.ssh.http.telnet.https ftp:File Transfer Protocol,文件传输协议,是应用层的 ...