js对象(Object)常用方法(Api)

工作和学习中会使用到很多Object的方法, 能够熟练掌握ObjectApi 很有必要.

Object.assign(target, source1, source2…): 用于将一个或多个对象的可枚举属性 (对象属性是否可以在 for…in循环和 Object.keys()中被枚举) 的值合并到目标对象.

参数说明:

  1. target: 目标对象
  2. source: 被合并对象 可以传一个或者多个

Object.assign用法
注: 如果属性的键名称相同 后面的被合并对象的值会覆盖前面的. assign只会修改目标对象

关于复制过来是深浅克隆的问题:
assing浅克隆


Object.definedProperty(obj, prop, descriptor): 用于在对象上定义或者修改一个属性, 可定义其 可枚举性, 是否可修改删除等

详细请见早段时间写的另一篇文章 详细说明Object.definedProperty() 方法


Object.create(proto,[propertiesObject]): 用于创建一个新的对象

参数说明:

  1. proto: 新创建对象的原型对象
  2. propertiesObject: 可选 定义该对象属性的值 以及 是否可被枚举 修改 删除等(详情可参照 definedProperty文章中的第三个参数)
  • 使用Object.create创建一个简单的对象 操作其属性和方法

Object.create的基本使用

  • 使用Object.create的第二个参数, 指定属性的详细配置
    Object.create的第二个参数

Object.entries(obj): 用于返回对象自身可枚举属性的键值对数组

在这里插入图片描述

如果需要将Object转为Map结构 object.entries()用起来就十分方便了
在这里插入图片描述


Object.freeze(obj): 用于冻结一个对象, 被冻结的对象不能被修改(包括 不能添加新属性, 删除属性, 修改属性值, 修改属性的可枚举性、可配置性、可写性)

在这里插入图片描述

注: Object.isFrozen() 可以判断该对象是否被冻结 Object.freeze()可对比下面的Object.seal()


Object.seal(obj): 密封一个对象(不能添加属性, 删除属性并且将现有的所有属性标记为不可配置), 多用于防止对象属性被删除. 与Object.freeze()不同的是 可以修改可写属性的值

在这里插入图片描述

注: Object.isSealed() 可以判断该对象是否被密封 而且当一个对象被冻结 Js为认为他是被密封的
在这里插入图片描述
相反一个密封的对象 是不会被判定为冻结的 这很好理解 因为冻结包含了密封的所有操作 而密封的值可以被修改
在这里插入图片描述


Object.getOwnPropertyDescriptor(obj, prop): 用于返回一个对象上属性对应的属性描述符

属性描述符包括:

  • value: 属性的值,默认为undefined
  • writable:该属性是否可写,如果直接在对象上定义属性,则默认为true。
  • enumerable:是否能够被枚举,如果直接在对象上定义属性,则默认为true
  • configurable: 属性的可配置性, 即是否可修改(writabel,configurable,enumerable),如果直接在对象上定义属性,则默认为true
  • get:当对象访问prop属性的时候,会调用这个方法,并返回结果。默认为undefined
  • set:当对象设置该属性的时候,会调用这个方法,默认为undefined

在这里插入图片描述
Object.getOwnPropertyDescriptors() 则可以用来或者对象上所有属性的属性描述符

在这里插入图片描述


Object.getOwnPropertyNames(): 用于列举自身所有属性名称(包括可枚举不可枚举)
Object.keys(): 用于列举自身所有可枚举属性名称

说到这两个方法 不得不说一下 getOwnPropertyNames()、Object.keys()、for … in这三者的区别了

  • getOwnPropertyNames(): 列举自身所有属性名称(包括可枚举不可枚举) 不会列举原型链上的属性
  • Object.keys(): 列举自身所有可枚举属性名称 不会列举原型链上的属性
  • for … in: 列举自身包括原型链上的说有可枚举属性

具体见如下代码

在这里插入图片描述


Object.getPrototypeOf(obj): 用于获取目标对象原型

Object.getPrototypeOf应用


Object.isExtensible(obj): 用于判断对象是否可扩展(是否可在上面新增属性)
Object.preventExtensions(obj): 用于阻止对象被扩展

在这里插入图片描述

注: Object.preventExtensions,Object.seal 或 Object.freeze 方法都可以标记一个对象为不可扩展


Object.is(value1, value2): 判断两个值是否为同一个值

在这里插入图片描述
注: 与 === 运算符不同 Object.is() 将 +0 和 -0判为false 将 NaN 和 NaN判断为相等


Object.values(obj): 用于返回一个对象自身所有可枚举属性值的数组

在这里插入图片描述
注: 可以与Object.keys() 联系起来 一个是返回所有可枚举属性的键 一个是返回所有可枚举属性的值


字符串相关Api可以参考另外一篇文章: JS字符串(String)常用方法(Api)