
1、新增方法
1.1.Object.is();
等价于严格相等(===)
1 | +0 === -0 //true |
1.2.Object.assign();
拷贝对象,浅拷贝
1 | const target = { a: 1 }; |
1.3.Object.getOwnPropertyDescriptors();
ES5 的Object.getOwnPropertyDescriptor()
方法会返回某个对象属性的描述对象(descriptor)
ES6 的Object.getOwnPropertyDescriptors()
方法,返回指定对象所有自身属性(非继承属性)的描述对象。
1 | // 实现拷贝 get/set方法 |
1.4.Object.create();
一个对象继承另一个对象,另一个对象作为该对象的原型;
1 | // es5 的写法 |
1.5.Object.setPrototypeOf();
设置对象的原型
Object.setPrototypeOf
方法的作用与__proto__
相同,用来设置一个对象的原型对象(prototype),返回参数对象本身
1 | // 格式 |
1.6.Object.getPrototypeOf();
读取对象的原型对象
1 | Object.tetPrototypeOf(obj) === obj.__proto__ |
1.7.Object.keys();
1.8.Object.values();
1.9.Object.entries();
1.用途是遍历对象的属性
1 | let obj = { one: 1, two: 2 }; |
2.将对象转为真正的Map
结构。
1 | const obj = { foo: 'bar', baz: 42 }; |
1.10.Object.hasOwn();
对象实例有一个hasOwnProperty()
方法,可以判断某个属性是否为原生属性。
ES2022 在Object
对象上面新增了一个静态方法Object.hasOwn()
,也可以判断是否为自身的属性
1 | const foo = Object.create({ a: 123 }); |
Object.hasOwn()
的一个好处是,对于不继承Object.prototype
的对象不会报错,而hasOwnProperty()
是会报错的。
1 | const obj = Object.create(null); |
1.11.Object.fromEntries();
Object.fromEntries()
方法是Object.entries()
的逆操作,用于将一个键值对数组转为对象。
1 | Object.fromEntries([ |
主要目的,是将键值对的数据结构还原为对象,因此特别适合将 Map 结构转为对象。
1 | const entries = new Map([ |
2.preventExtensions、seal、freeze
2.1 Object.preventExtensions()
Object.preventExtensions()
是防止对象新增属性,也防止对象的原型被重新赋值。
1 | const o1 = { a: 1 } |
2.2 Object.seal()
bject.seal
的效果相当于: 在Object.defineProperty
时将configurable
设置成false
,同时对对象调用Object.preventExtensions
。但是原有的属性值是可以修改的。
1 | const o1 = { a: 1 } |
2.3 Object.freeze()
Object.freeze
是在Object.seal
的基础上再防止属性值被修改,将属性都变成 只读型(Readonly)。
1 | const o1 = { a: 1 } |
总结:
- ==
Object.preventExtensions()
:可以修改、删除,不能新增;== - ==
Object.seal()
:可以修改,不能删除、新增;== - ==
Object.freeze()
:不能修改、删除、新增;==
- Post title: ES6-Object的新增方法
- Create time: 2020-09-12 13:15:00
- Post link: 2020/09/12/Object/
- Copyright notice: All articles in this blog are licensed under BY-NC-SA unless stating additionally.