js的object构造函数的新增API

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)
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值