Object.assign() 方法详解
来源:互联网 发布:淘宝囤货小当家 编辑:程序博客网 时间:2024/05/16 18:48
Object.assign()
方法用于将所有可枚举属性的值从一个或多个源对象复制到目标对象。它将返回目标对象。
语法
Object.assign(target, ...sources)
参数
target
- 目标对象。
sources
- 源对象。
返回值
目标对象。
描述
如果目标对象中的属性具有相同的键,则属性将被源中的属性覆盖。后来的源的属性将类似地覆盖早先的属性。
Object.assign
方法只会拷贝源对象自身的并且可枚举的属性到目标对象。该方法使用源对象的[[Get]]
和目标对象的[[Set]]
,所以它会调用相关 getter 和 setter。因此,它分配属性,而不仅仅是复制或定义新的属性。如果合并源包含getter,这可能使其不适合将新属性合并到原型中。为了将属性定义(包括其可枚举性)复制到原型,应使用Object.getOwnPropertyDescriptor()
和Object.defineProperty()
。
String
类型和 Symbol
类型的属性都会被拷贝。
在出现错误的情况下,例如,如果属性不可写,会引发TypeError
,如果在引发错误之前添加了任何属性,则可以更改target
对象。
注意,Object.assign
会跳过那些值为 null
或 undefined
的源对象。
示例
复制一个对象
var obj = { a: 1 };var copy = Object.assign({}, obj);console.log(copy); // { a: 1 }
深拷贝问题
针对深拷贝,需要使用其他方法,因为 Object.assign()
拷贝的是属性值。假如源对象的属性值是一个指向对象的引用,它也只拷贝那个引用值。
function test() { 'use strict'; let obj1 = { a: 0 , b: { c: 0}}; let obj2 = Object.assign({}, obj1); console.log(JSON.stringify(obj2)); // { a: 0, b: { c: 0}} obj1.a = 1; console.log(JSON.stringify(obj1)); // { a: 1, b: { c: 0}} console.log(JSON.stringify(obj2)); // { a: 0, b: { c: 0}} obj2.a = 2; console.log(JSON.stringify(obj1)); // { a: 1, b: { c: 0}} console.log(JSON.stringify(obj2)); // { a: 2, b: { c: 0}} obj2.b.c = 3; console.log(JSON.stringify(obj1)); // { a: 1, b: { c: 3}} console.log(JSON.stringify(obj2)); // { a: 2, b: { c: 3}} // Deep Clone obj1 = { a: 0 , b: { c: 0}}; let obj3 = JSON.parse(JSON.stringify(obj1)); obj1.a = 4; obj1.b.c = 4; console.log(JSON.stringify(obj3)); // { a: 0, b: { c: 0}}}test();
底层原理图如下:
阅读全文
0 0
- Object.assign() 方法详解
- Object.assign()方法
- ES6之Object.assign()详解
- es6 javascript对象方法Object.assign()
- es6 javascript对象方法Object.assign()
- es6 javascript对象方法Object.assign()
- es6 javascript对象方法Object.assign()
- Object.assign()
- Object.assign
- Object.assign()
- Object.assign()
- Object.assign方法的使用和splice方法用法
- JavaScript 复制对象【Object.assign方法无法实现深复制】
- Object方法详解
- Object.keys方法详解
- class object assign operater
- Object.assign的使用
- node之object-assign
- 第十一天培训!!!
- 读取TXT文件的方法
- str函数1
- npm run XXX
- HDU-4111 Alice and Bob(博弈 + 记忆化搜索)
- Object.assign() 方法详解
- [游戏]绝地求生听不到队友说话,自己也不能说话
- Presentation 常用的承接句——技术分享、学术报告串联全场不尴尬
- 漂亮的分页插件JPAGINATE个人使用心得
- Swift 4 无限滚动轮播图(UICollectionView实现)
- Can't find msguniq. Make sure you have GNU gettext tools 0.15 or newer installed.
- Android图片加载框架Glide之探究Glide的缓存机制
- java:String使用equals和==比较的区别
- 推荐.Net、C# 逆向反编译四大工具利器