JavaScript Object学习笔记一

Object.assign(target, source1, source2, ...)//用于对象的复制合并(同名属性后覆盖前)或拷贝(拷贝自身可枚举属性,不拷贝继承属性或不可枚举属性),将source源对象的可枚举属性合并到target目标对象上并返回新的目标对象

 

Object.assign拷贝的是属性值,如果源对象的属性值是一个对象或者其他引用类型的话,拷贝的是这个对象的引用,改变目标对象或源对象的属性值时,对应都会改变,实现的是浅拷贝。如果源对象的属性值是基本数据类型的话,改变源对象或者目标对象的属性值时,不会相互影响改变,实现的是深拷贝。

var obj1 = {name: 'abc', other: {age: 10, sex: 'boy'}};

var obj2 = Object.assign({}, obj1);

obj1.name = 'def';

obj1.other.age = 20;

obj2;//{name: 'abc', other: {age: 20, sex: 'boy'}}

obj2.other.sex = 'girl';

obj1;//{name: 'abc', other: {age: 20, sex: 'girl'}}

 

如果目标参数不是对象,则会转化为对象返回(eg: Object.assign(2)//new Number(2)),但是undefined和null在目标对象位置无法转化为对象,所以会报错,但是在源对象位置,则会跳过不会报错。源对象不是对象的话,如果不能转化为对象则会跳过,除了字符串会以数组形式解构拷贝到目标对象上,其他类型参数都会跳过

eg: Object.assign({}, 'abc', 1, true, undefined, null, NaN, Symbol('1'))

//{0: 'a', 1: 'b', 2: 'c'}

 

Object.assign([1, 2, 3], [4, 5])//[4,5,3]

相当于Object.assign({0: 1, 1: 2, 2: 3}, {0: 4, 1: 5})

 

Object.assign()不会拷贝求值取值函数,而是将函数运算完作为一个值拷贝,也不会拷贝属性值的get或set方法

Object.assign({}, {get fn(){return 1;}})//{fn: 1}

posted @ 2021-05-15 17:30  IT小猿人  阅读(28)  评论(0编辑  收藏  举报