ES6 Object
的新增 API
Objext.is
用于判断两个对象是否相等,这其实是一个历史遗留问题,在原来当我们判断相等的时候,会发生一些怪异的现象,那么能不能解决这些问题呢,可以是可以但是老版本的浏览器不太会兼容这些改动,所以不得不这样。
//在我们面临这些问题时就会有一定问题
console.log(NaN === NaN);//flase
console.log(+0 === -0);//ture
//因此ES6出了一种新的API,Objext.is
用于判断两个数据是否相等,基本上跟严格相等===
是一致的除了以下两点:
- NaN === NaN 相等
- +0 === -0 不相等
Object.assign
用于混合对象
const obj1 = {
a : 123,
b : 456,
c : 789
}
const obj2 = {
a : 123,
b : 456,
c : 789,
d : 666
}
const obj = Object.assign(obj1, obj2);
此时他会把obj2
的属性合并到obj1
,有的覆盖没有的添加,但有一个问题是他会将obj1
给更改掉,这是在ES6之前遇到的问题在展开运算符之后就不怎么使用了具体见我的博客ES6 剩余参数 展开运算符博客。
一般的解决办法是:
const obj = Objecct.assign({}, obj1 ,obj2);
//将前面放一个大括号这样改动的就是第一个对象了
Object.getOwnPropertyNames
Object.getOwnPropertyNames的枚举排序,之前就存在,只不过,官方没有明确要求,对属性的顺序如何排序,而如何排序,完全由浏览器厂商决定。
ES6规定了该方法返回的数组排序方式如下
- 先排数字,按照升序排序
- 再排其他,按照书写顺序
const obj = {
d : 1,
b : 2,
c : 3,
0 : 5,
5 : 4,
4 : 1
}
//在一个数组中将属性名按照升序排列,只改变数字不改变其他
结果如下
Object.setPrototypeOf
该函数用于设置某个对像的隐式原型
比如:Object.setPrototypeOf(obj1 ,obj2)
,
相当于:obj1.__proto__ = obj2
把obj1的原型改为obj2
所以说ES6相当于提供了修改原型的一种方法。