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).它至少需要两个对象作为参数,第一个参数是目 ...
随机推荐
- RabbitMQ之工作队列
工作队列 工作队列(又称:任务队列Task Queues)是为了避免等待一些占用大量资源.时间的操作,当我们把任务Task当做消息发送队列中,一个运行在后台的工作者worker进程就会取出任务然后处理 ...
- 【技术翻译】支持向量机简明教程及其在python和R下的调参
原文:Simple Tutorial on SVM and Parameter Tuning in Python and R 介绍 数据在机器学习中是重要的一种任务,支持向量机(SVM)在模式分类和非 ...
- STM32F030如何正确配置IO口的复用功能
本文所使用的单片机型号为STM32F030C8T6. 在030系列的单片机中,PA2引脚除了作为普通的IO引脚用作输入输出功能以外,还可以作为内部外设串口1,串口2,定时器15通道1这三个外设的功能引 ...
- iOS上new Date异常解决办法
最近有一个项目要实现使用Angluar写一个简历模板, 用户输入姓名/生日/简介...等内容, 然后生成一份在线的简历 后来测试时遇到简历模板在Android手机跟Google浏览器上根据生日计算得出 ...
- 搭建php环境的几种方法
对于想学习php开发初学者来说,先要学习搭建php开发环境,因为要做php开发,搭建一个能够运行php网站的服务器环境是第一步,传统的php环境软件非常复杂,好在很多公司开发了一键搭建php安装环境, ...
- 在动态链接库dll中弹出对话框
在动态链接库dll中弹出对话框步骤: 1.添加Dialog资源,然后在资源视图的对话框界面右击添加类,输入类名MyDlg,使得其继承与CDialogEx.(继承CDialog应该也可以)2.在新生成的 ...
- 《Linux命令行与shell脚本编程大全》第二十章 正则表达式
20.1 什么是正则表达式 20.1.1 定义 正则表达式是你所定义的模式模板.linux工具可以用它来过滤文本. 正则表达式利用通配符来描述数据流中第一个或多个字符. 正则表达式模式含有文本或特殊字 ...
- CCF-201312-2-ISBN号码
问题描述 试题编号: 201312-2 试题名称: ISBN号码 时间限制: 1.0s 内存限制: 256.0MB 问题描述: 问题描述 每一本正式出版的图书都有一个ISBN号码与之对应,ISBN码包 ...
- 文件夹的创建(cmd利用)
在windows本地上创建文件夹是无法用..结束的,我们要创建的话,需要在cmd里面进行创建输入 mkdir abc..\ 那么我们从本地看出abc..文件夹建成了怎么删除呢? 需要手动在里面建个文件 ...
- 关于promise的详细讲解
到处是回调函数,代码非常臃肿难看, Promise 主要用来解决这种编程方式, 将某些代码封装于内部. Promise 直译为"承诺",但一般直接称为 Promise; 代码的可读 ...