js Object.assign()函数以及深、浅拷贝

JavaScript012

js Object.assign()函数以及深、浅拷贝,第1张

object.assign():用于将源对象(source)中可枚举的属性复制到目标属性(target)中,并返回目标对象。

let a={a:1}let b={b:2}let c={c:3}

console.log(Object.assign(a,b,c))

//{ a: 1, b: 2, c: 3 }

浅拷贝:也叫引用拷贝,公用一块内存地址,一个改变另一个也改变;

深拷贝:创建新的内存地址保存值,与原对象完全独立。

深拷贝和浅拷贝只针对复杂的复杂的对象有差别;

注意:针对object.assign()而言,如果属性值是简单类型(number,string),通过object.assign({},src)得到的新对象是深拷贝对象;如果属性值为对象或其他引用类型,得到的新对象为浅拷贝对象。

Object.entries(obj)

将一个可枚举对象按照键值对展开为数组

Object.assign(target, source)

将一个或多个可枚举对象的可枚举属性复制到 target 对象,返回 target 对象。第一级属性深拷贝,以后级别属性浅拷贝

Object.freeze(obj)

相应的也有判断是否冻结的方法----Object.isFrozen()

冻结一个对象。一个被冻结的对象再也不能被修改,包括所有的属性,甚至包括他的原型。返回与原对象相同参数的对象

Object.create(obj)

创建一个新对象,将现有的对象创建为新对象的 proto 。返回一个新对象

Object.keys(obj)

遍历一个对象,将 key 返回为数组

Object.defineProperty(obj, prop, descriptor)

参数:

obj:被操作对象

prop:修改或要定义的属性名

descriptor:修改或要定义的属性的属性描述,即prop的描述

新增或修改一个对象的属性,并返回该对象

扩展:在vue中通过递归调用此方法,为对象的每一个属性绑定get()、set()方法,实现对象的数据监听

Object.getPrototypeOf(obj)

返回目标对象的 prototype 的值。

给定对象的原型。如果没有继承属性,则返回 [null]