面试官:说说Object有哪些常用的方法?

面试官:说说Object有哪些常用的静态方法?

Object有哪些常用的静态方法?



前言

Object() 构造函数将输入转换为一个对象。它的行为取决于输入的类型。


一、Object.assign() 浅拷贝

用于复制一个对象

let obj = { name: '孙悟空', age: 520, address: '花果山' }
let newObj = {}
Object.assign(newObj, obj)
console.log(newObj === obj); // false

二、Object.defineProperty()

给对象添加单个属性,并指定该属性的配置属性

    let obj = { name: '孙悟空' }
    // 需要添加属性的属性值
    let teacherName = '菩提老祖';
    Object.defineProperty(obj, 'teacher', {
      get: () => {
        return teacherName
      },
      set: (val) => {
        teacherName = val
      },
      // get和value/writable均不能混用,会有提示
      configurable: true,
      enumerable: true
    })
    
    Object.defineProperty(obj, 'student', {
      value: '小猴子', // 与属性相关联的值
      writable: false, // 是否可重写
      configurable: false, // 是否可删除
      enumerable: true //是否可枚举 
    })
    obj.teacher = '唐僧' // 可改
    obj.student = '我' // 不可改
    console.log(obj)
// {"name": "孙悟空","teacher": "唐僧","student": "小猴子"}

三、Object.defineProperties()

可同时设置多个属性

    let obj = { name: '孙悟空' }
    Object.defineProperties(obj, {
      name: {
        value: 'Jake'
      },
      age: {
        get: () => {
          return this.value || 22
        },
        set: () => {
          this.value = value
        }
      } 
    })
    console.log(obj); // { "name": "Jake" } 此时age属性为不可枚举

四、Object.entries() /Object.fromEntries()

Object.entries() 转对象为二维数组
Object.fromEntries() 二维数组转对象

    let obj = { name: '孙悟空', age: 520, address: '花果山' }    
    let newObj = Object.entries(obj)
    console.log(newObj); // [['name','孙悟空'], ['age',520], ['address', '花果山']]
    let oldObj = Object.fromEntries(newObj)
    console.log(oldObj); // { name: '孙悟空', age: 520, address: '花果山' }

五、Object.freeze() 浅冻结/Object.isFrozen()

Object.freeze() 冻结对象,浅冻结只冻结第一层,冻结后对象不会添加get和set属性,实现双向绑定
Object.isFrozen()判断是否为冻结对象

    let obj = { name: '孙悟空', age: 520, address: '花果山' }   
    let freeze = Object.freeze(obj)
    obj.name = '嘻嘻'
    console.log('freeze', obj); // {"name": "孙悟空","age": 520,"address": "花果山"}
    let isFrozen = Object.isFrozen(obj)
    console.log('isFrozen', isFrozen); // true

六、Object.hasOwn()

判断该对象是否有某个属性,返回值为true or false

  let hasOwn = Object.hasOwn(obj, 'nini')
    console.log('hasOwn', hasOwn);
    //用for in 也可以进行判断的

七、Object.groupBy()

用某个属性进行分组,得到一个以属性分组的对象
MDN提示,这是一项实验性技术,在将其用于生产之前,请仔细检查浏览器兼容性表格

    let peoples = [
      { name: '宝玉', age: 12 },
      { name: '黛玉', age: 11 },
      { name: '宝钗', age: 15 },
      { name: '香菱', age: 15 },
    ]
    // 以年纪分组,对象属性值以升序排列
    const peopleByAge = Object.groupBy(peoples, (person) => person.age);
    console.log('peopleByAge', peopleByAge);
    // {
    //   "11": [{"name": "黛玉","age": 11 }],
    //   "12": [{"name": "宝玉","age": 12 }],
    //   "15": [{"name": "宝钗","age": 15 },{"name": "香菱","age": 15 }]
    // }

八、Object.keys()/Object.values

Object.keys() 获取对象的所有属性名的数组
Object.values()获取对象的所有属性值的数组

// 获取对象的所有属性名的数组
let obj = { name: '孙悟空', age: 520, address: '花果山' }
let newArr = Object.keys(obj) 
console.log(newArr) // ['name', 'age', 'address']
// 获取对象的所有属性值的数组
let obj = { name: '孙悟空', age: 520, address: '花果山' }
let newArr = Object.values(obj) 
console.log(newArr) // ['孙悟空', 520, '花果山']

做个记录,如有不足,欢迎指正。
积跬步,至千里。感谢前进路上的每个小困难,冲!!

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值