整理Object的一些方法

发布时间:2019-08-11 发布网站:脚本宝典
脚本宝典收集整理的这篇文章主要介绍了整理Object的一些方法脚本宝典觉得挺不错的,现在分享给大家,也给大家做个参考。

ES5 和 ES6 中 Object 添加了很多新的方法,现在很多开代码中有用到了这些,今天来整理一番。

Object.assign()

这是ES6新添加的方法,Object.assign()用来复制源对象的所有可枚举属性复制到目标对象中,方法返回目标对象。语法如下:

Object.assign(target, ...source);

source对象可以有很多个,比如:

let target = {name: 'target'};
let source1 = {age: 23};
let source2 = {email: 'zhanglun1410@gmail.COM'};
// ...
// let sourceN ={.....};
traget = Object.assign(target, source1, source2);

如果源对象和目标对象的属性的key相同,目标对象的属性将会被源对象中的属性覆盖。对于多个源对象来说,如果有相同的key,右边的属性将覆盖左边的属性。这个方法只能将源对象的可枚举对象和自己的属性复制给目标对象。

什么是可枚举对象()?
可枚举属性是指那些内部 “可枚举” 标志设置为true的属性,对于通过直接的赋值和属性初始化的属性,该标识值默认为即为true,对于通过Object.defineProperty等定义的属性,该标识值默认为false。可枚举的属性可以通过 for...in 循环进行遍历(除非该属性名是一个 Symbol)。

对于源对象,Object.assign使用[[Get]],而在目标对象上使用[[Set]],也就是说,使用这个方法会源对象的getter和目标对象的setters。所以其本质就是定义或者复制一个新的属性。如果等待合并的源对象包含了getters,那就不太适合用来将源对象合并到原型中。假如复制的属性到原型里,包括它们的可枚举属性,那么应该使用 Object.getOwnPropertyDescriptor() 和 Object.definePRoPErty() 。String 和 Symbol 属性都是会被复制的。

如果遇到了一个错误,比如目标对象的某个属性是不可修改的,会抛出一个TypeError的错误吗,目标对象保持不变