Object.is()
该方法可以用于判断两个对象是否相等,也可以用于判断两个数据是否相等,基本等同于 === 运算符,只有两个区别
js
console.log(NaN === NaN);//false
console.log(Object.is(NaN,NaN));//true
console.log(+0 === -0);//true
console.log(Object.is(+0,-0));//false除了这两个情况,其他的和 === 完全相等。
Object.assign()
该方法用于混的对象,这个方法在 6.其他补充中介绍过,这里不再重复赘述
实际上,用 ES 7 的展开运算符可以更方便地实现混合
Object.getOwnPropertyNames()
这个方法在 ES 6 之前就存在,可以获取一个数组,这个数组包含了该对象的所有属性名,但是在 ES 6 之前官方并没有规定如何对属性进行排序,完全由浏览器厂商决定。
ES 6 之后,官方规定了这个数组应该如何排序,排序方式如下
- 数字属性按照数字大小升序排序,并且排在其他属性前面
- 其他的属性根据书写顺序进行排序
Object.setPrototypeOf()
在原型那里,我们学习了 Object.getPrototypeOf(),可以获取指定对象的原型,或者说隐式原型。这个方法和那个是一对,这个方法可以设置某个对象的隐式原型。第一个参数为需要修改原型的对象,第二个参数传入一个对象,调用之后,就会把第一个参数中的对象的隐式原型修改为第二个参数传入的对象。
但是不管用哪种方式修改原型,其实都是一个耗费性能的操作,因为修改原型会导致浏览器引擎很难去优化 JS 代码。我们可以使用
Object.create来创建一个指定原型的对象,但是应该尽量避免修改现有对象的原型。