Object.assign方法是浅拷贝还是深拷贝?
1,普通变量
let obj={name:"zhangsan",colors:["red", "green", "blue"]}; let obj2=Object.assign({},obj); obj2.name='wang'; console.log(obj2);//name wang colors:["red", "green", "blue"] console.log(obj);//name zhangsan colors:["red", "green", "blue"]
2,引用变量
let obj={name:"zhangsan",colors:["red", "green", "blue"]}; let obj2=Object.assign({},obj); obj2.colors[0]='orange'; console.log(obj2);//name zhangsan colors:["orange", "green", "blue"] console.log(obj);//name zhangsan colors:["orange", "green", "blue"]
所以Object.assign对于含有引用类型值的对象无法深拷贝。
3,如果参数是数组
普通数组
let colors=['red','green','blue']; let colors2=Object.assign([],colors); colors2[0]="orange"; console.log(colors2);//['orange','green','blue'] console.log(colors);//['red','green','blue']
含有引用类型的值的数组
let colors=['red','green','blue',['football','basketball','volleyball']]; let colors2=Object.assign([],colors); colors2[3][0]="ping-pang"; console.log(colors2);//['red','green','blue',['ping-pang','basketball','volleyball']] console.log(colors);//['red','green','blue',['ping-pang','basketball','volleyball']]
和上面一样,如果一维数组里面有引用类型的值,则无法深拷贝。
相关推荐
下面这篇文章将介绍ES6的Object.assign()属性,可以用于对象复制。 在JavaScript生态系统中,对象复制有另外一个术语: extend。下面是两个JS库提供的extend接口: Prototype: Object.extend(destination, source) ...
es6-promise.auto.min.js
1.Object.assign()基本用法: Object.assign方法用来将源对象(source)的所有可枚举属性,复制到目标对象(target)。它至少需要两个对象作为参数,第一个参数是目标对象,后面的参数都是源对象。 let targetObj1 ...
<!-- Automatically provides/replaces `Promise` if missing or broken. --> [removed][removed] ...-- Minified version of `es6-promise-auto` below. --> [removed][removed] [removed][removed]
ES6 Object.assign() 的实现; 安装 $ bower 安装 es6-object-assign 用法 var oa = new ObjectAssign ( ) ; var t = { name : "lisa" , age : 25 } ; var r = { speak : function ( ) { console . log ( 'Hello, ...
该插件的工作方式与插件类似,不同之处在于,它允许您提供自己的实现(而不是Babel使用的_extends帮助器)来替换Object.assign 。 同样,此插件将在使用Object.assign文件中导入外部软件包,而不是在每个文件中重新...
es6-promise.auto.js ,可用于微信小程序开发,小程序里需要
ES6 Object.assign() 类似功能,但不替换现有属性,并且是递归的。 用法 var defaultAssign = require ( 'default-assign' ) ; // does not overwrite equal keys defaultAssign ( { foo : 0 , bar : 1 } , { bar :...
angular-es6, 在ES6的1.x 中使用特性的实验 Angular ES6一个在 AngularJS 1.x 应用程序中使用ES6类的示例方法。查看文章中的ES6类 explore 1.x 以获得完整的解释。 更新:2015年10月: 这里 repo 中的材料已经被其他...
基本数据类型包括Number、Boolean、String、Null、String、Symbol(ES6 新增),而复杂数据类型包括Object,而所有其他引用类型(Array、Date、RegExp、Function、基本包装类型(Boolean、String、Number)、Math等...
分配样式npm install assign-styles ES6 Polyfill for Object.assign尊重!重要符号。 这和,但是是专门为样式对象而设计的,因为它们在React中用于定义内联样式。执照指定样式已根据进行了。 创建于 :heart_suit: ...
ES6中...三个点的用法
ES6 Core Symbol 一个不可变的数据类型,用来产生唯一的标识,但是却无法直接访问这个标识 Promise 异步编程函数 Set 有序列表集合,它不会包含重复项 WeakSet 列表集合,和Set一样,只不过它的值只能是非空对象 Map ...
#object-is 符合ES2015的Object.is填充程序-区分-0和+0,并且可以与NaN进行比较。 本质上,Object.is返回与===相同的值-但对于NaN为true,对于-0和+0为false。 该软件包实现了接口。 它可以在ES3支持的环境中...
ES6最全总结.mmap、ES6最全自学笔记、ES6入门到深入、ES6自学路线
ES6 转化为 ES5的实现思路.md
es6和html基础.rar
es6modules-nodejs, 在 node.js 中,对ES6模块讨论的总结 在 node.js ( 2016 ) 中的 ES2015 MODULE 检测。:这是什么?node 已经公开讨论了如何在未来版本的 Node.js 中实现 ES2015 modules的方法。 目前已经有几个...