Es6中关于对象方法的扩展

Object.is()

这个方法与===很像,但同时也考虑到了边界情形。这个方法必须接收两个参数:
主要用于判断两个对象是否相等,但和’===有一些不一样的地方

console.log(Object.is(true, 1)); // false 
console.log(Object.is({}, {})); // false 
console.log(Object.is("2", 2)); // false 
// 正确的 0、-0、+0 相等/不等判定
console.log(Object.is(+0, -0)); // false 
console.log(Object.is(+0, 0)); // true 
console.log(Object.is(-0, 0)); // false 
// 正确的 NaN 相等判定
console.log(Object.is(NaN, NaN)); // true 
//要检查超过两个值,递归地利用相等性传递即可:
function recursivelyCheckEqual(num, ...test) { 
 return Object.is(num, test[0]) && 
 (test.length < 2 || recursivelyCheckEqual(...test)); 
}

Object.assign()

ECMAScript 6 专门为合并对象提供了 Object.assign()方法。这个方法接收一个目标对象和一个
或多个源对象作为参数

const student={
    name:'syz',
    age:18,
    aaa:'1111'
}
const student1={
    name:'zs',
    age:36,
    bbb:'1111'
}
//后面的会覆盖前面的重名属性和方法
console.log(Object.assign(student,student1));//{ name: 'zs', age: 36, aaa: '1111', bbb: '1111' }
  • 注意:后面传入的参数会覆盖前面的重名属性和方法

Object.keys()

获取对象所有的键,返回一个数组

let obj={
    a:"1",
    cities:["a","b","c"]
}
console.log(Object.keys(obj));//[ 'a', 'cities' ]

Object.values()

获取对象的所有值,返回一个数组

let obj1={
    a:"1",
    cities:["a","b","c"]
}
console.log(Object.values(obj1));//[ '1', [ 'a', 'b', 'c' ] ]

Object.entries()

获取对象的键和值,返回一个数组

let obj1={
    a:"1",
    cities:["a","b","c"]
}
console.log(Object.entries(obj1))//[ [ 'a', '1' ], [ 'cities', [ 'a', 'b', 'c' ] ] ]

Object.setPrototypeOf()

为一个对象设置它的原型对象

const person = {
    dosth:"play lol"
}
const animal={
    attr:['eat','drink']
}
Object.setPrototypeOf(person,animal)
console.log(person.__proto__.attr[0]);//eat

Object.getOwnPropertyDescriptors()

获取对象的描述信息,返回一个数组

let obj1={
    a:"1",
    cities:["a","b","c"]
}
console.log(Object.getOwnPropertyDescriptors(obj1));
//输出:
/*
{
  a: { value: '1', writable: true, enumerable: true, configurable: true },
  cities: {
    value: [ 'a', 'b', 'c' ],//值
    writable: true,//该值是否可以被修改
    enumerable: true,//是否可以被枚举
    configurable: true,//是否可以被删除
  }
}
*/

Object.defineProperty()

创建对象的值和描述信息的函数(传一个值)

const student = {
  name: "小明",
  age: 19,
  [Symbol("level")]: "优秀",
};
Object.defineProperty(student, "gender", {
  value: "男", //值
  writable: true, //是否可修改的
  enumerable: true, //是否可以枚举的
  configurable: true, //是否可以删除的
});
console.log(student)//{ name: '小明', age: 19, gender: '男', [Symbol(level)]: '优秀' }

Object.defineProperties()

创建对象的值和描述信息的函数(传多个值)

const student = {
  name: "小明",
  age: 19,
  [Symbol("level")]: "优秀",
};
Object.defineProperties(student,{
    id:{
      value:'001',
      writable: true, //是否可修改的
      enumerable: true, //是否可以枚举的
    },
    sex:{
      value:'男',
      writable: true, //是否可修改的
      enumerable: true, //是否可以枚举的
      configurable: true, //是否可以删除的
    }
})
console.log(student)//{name: '小明', age: 19, id: '001', sex: '男', Symbol(level): '优秀'}
  • 如果用上述方法创建,描述对象的属性值默认为false

确定不点个赞再走嘛?
在这里插入图片描述

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值