Obeject是构造函数!!
1. Object.is(a,b)
用于判断两个数据是否相等,基本上跟严格相等(===)是一致的,除了以下两点:
(1) NaN和NaN相等
(2) +0和-0不相等
console.log(NaN === NaN); // false
console.log(+0 === -0); // true
console.log(Object.is(NaN, NaN))// true
console.log(Object.is(+0, -0))// false
2. Object.assign():Object.assign() 方法用于将所有可枚举属性的值从一个或多个源对象复制到目标对象。它将返回目标对象。
用于混合对象(混合成为一个新的对象,有相同属性就覆盖,没相同属性就保留)
const obj1 = {
a: 123,
b: 456,
c: "abc"
}
const obj2 = {
a: 789,
d: "kkk"
}
//混合对象方法1:
{
a: 789,
b: 456,
c: "abc",
d: "kkk"
}
//混合对象方法2:
const obj = {
...obj1,
...obj2
}
//使用Object.assign()方法:
//将obj2的数据,覆盖到obj1,并且会对obj1产生改动,然后返回obj1
const obj = Object.assign(obj1, obj2);//obj2没动,obj2覆盖了obj1,obj1被改了,返回的这个obj===obj1,这样不好
//使用巧妙的方式使用Object.assign()来处理:
const obj = Object.assign({}, obj1, obj2);//返回的是一个新对象,不改动obj1了,完美
console.log(obj)
console.log(obj===obj1)
console.log(obj1)
console.log(obj2)
3. Object.getOwnPropertyNames() 的枚举顺序:传对象进去,返回一个字符串数组,如[ ‘a’ , ‘b’ , ‘c’ ]
Object.getOwnPropertyNames方法之前就存在,只不过,官方没有明确要求,对属性的顺序如何排序,如何排序,完全由浏览器厂商决定。
ES6规定了该方法返回的数组的排序方式如下:
- 先排数字,并按照升序排序
- 再排其他,按照书写顺序排序
const obj = {
d: 1,
b: 2,
a: 3,
0: 6,
5: 2,
4: 1
}
const props = Object.getOwnPropertyNames(obj)
console.log(props)
4. Object.setPrototypeOf(obj1,obj2) : 修改obj1的原型对象为obj2
该函数用于设置某个对象的隐式原型;圣杯模式中完成继承的时候可以用这个API;
比如: Object.setPrototypeOf(obj1, obj2),
相当于: obj1.proto = obj2
const obj1 = {
a: 1
}
const obj2 = {
b: 2
}
// obj1.__proto__ = obj2 想把obj1的原型改为obj2
Object.setPrototypeOf(obj1, obj2)
console.log(obj1)