Object常见API

Object.keys(obj):获取对象中所有可枚举的键,并返回一个数组。适用于需要遍历对象键的场景。

Object.values(obj):获取对象中所有可枚举的值,并返回一个数组。适用于需要遍历对象值的场景。

Object.entries(obj):获取对象中所有可枚举的键值对,并返回一个数组。适用于需要遍历对象键和值的场景。

Object.assign(target, …sources):将源对象中的所有可枚举属性复制到目标对象中,并返回目标对象。适用于对象合并的场景。

使用Object.assign()来实现浅拷贝。这是因为Object.assign()方法只能复制源对象属性的值,并不会复制它的引用。所以如果源对象的属性是一个对象的引用话,那么只是复制了这个引用。而不是这个引用所指向的对象。让我们来看一下示例代码:

const original = { a: { b: 1 } };
const copy = Object.assign({}, original);
console.log(copy); // { a: { b: 1 } }
console.log(original === copy); //false
console.log(original.a === copy.a); //true

如果有多个源对象具有相同的属性,那么最后一个源对象中的属性将覆盖先前源对象中相同名称的属性。最后,咱们再来看这个问题:如果合并的多个对象有相同属性,但是值不同最后结果怎样? 答案就是:后面的属性值将会覆盖前面的。

const obj1= {
       name:'jack'
   }
   const obj2= {
       name:'nancy'
   }
   const obj3= {
       name:'Lucas'
   }

   const obj={}
   Object.assign(obj,obj1,obj2,obj3)
   //如果是相同属性,以源对象的最后一个属性的值为准
   console.log(obj);// {name:'Lucas'}

Object.defineProperty(obj, prop, descriptor):通过定义某个对象上的属性来实现数据劫持。适用于需要控制对象属性怎样被访问和修改的场景。

Object.getOwnPropertyDescriptor(obj, prop):获取指定属性的属性描述符。适用于需要获取属性描述符的场景。

Object.defineProperties(obj, props):定义对象的多个属性。适用于需要定义多个属性的场景。

Object.getOwnPropertyNames(obj):获取对象所有自己拥有的属性名称,无论是否可枚举。适用于需要获取对象所有属性名称的场景。

Object.getOwnPropertySymbols(obj):获取对象自己拥有的所有Symbol类型的属性名称,无论是否可枚举。适用于需要获取对象所有Symbol属性名称的场景。

Object.getPrototypeOf(obj):获取指定对象的原型对象。适用于需要获取对象原型的场景。

Object.setPrototypeOf(obj, proto):设置指定对象的原型对象。适用于需要设置对象原型的场景。

Object.is(value1, value2):判断两个值是否相等。适用于需要判断两个值是否相等的场景。

Object.freeze(obj):冻结对象,使其不可更改。适用于需要保护对象不被更改的场景。

Object.seal(obj):密封对象,使其不能添加或删除属性,但可修改属性的值。适用于需要限制对象修改的场景。

Object.isSealed(obj):判断对象是否被密封。适用于需要判断对象是否被密封的场景。

Object.isFrozen(obj):判断对象是否被冻结。适用于需要判断对象是否被冻结的场景。

Object.fromEntries(entries):将键值对数组转换为对象。适用于需要将数组转换为对象的场景。

Object.create(proto, [propertiesObject]):基于指定的原型对象创建一个新对象。适用于需要创建新对象的场景。

Object.hasOwn(obj, prop):判断对象是否拥有指定属性。适用于需要判断对象是否拥有指定属性的场景。

Object.getOwnPropertyDescriptors(obj):获取指定对象所有属性的属性描述符。适用于需要获取对象所有属性的属性描述符的场景。

Object.values的Polyfill:在不支持Object.values的环境中实现该方法。适用于需要兼容低版本环境的场景。

Object.entries的Polyfill:在不支持Object.entries的环境中实现该方法。适用于需要兼容低版本环境的场景。

Object.assign的Polyfill:在不支持Object.assign的环境中实现该方法。适用于需要兼容低版本环境的场景。

Object.keys的Polyfill:在不支持Object.keys的环境中实现该方法。适用于需要兼容低版本环境的场景。

Object.preventExtensions(obj):阻止对象扩展,使其不能添加新属性。适用于需要限制对象扩展的场景。

Object.isExtensible(obj):判断对象是否可扩展。适用于需要判断对象是否可扩展的场景。

Object.assign(target,…sources)的深拷贝:将源对象中的属性和子对象递归地复制到目标对象中,并返回目标对象。适用于需要实现深拷贝的场景。

Object.entries的map用法:将对象转换为数组后,用map方法对数组进行操作,返回一个新的数组。适用于需要对对象进行操作的场景。

Object.entries的reduce用法:将对象转换为数组后,用reduce方法对数组进行遍历和累加,返回一个新的值。适用于需要对对象进行数据处理的场景。

Object.create的Polyfill:在不支持Object.create的环境中实现该方法。适用于需要兼容低版本环境的场景。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值