object有哪些方法:原生实用方法及实操用法
object的核心可用方法包含Object.keys()、Object.values()、Object.entries()、Object.assign()、Object.freeze()、Object.defineProperty()、Object.getOwnPropertyDescriptors()七大常用原生方法,各方法分别适配对象遍历、合并、冻结、属性配置、属性查询场景,大多数前端日常开发、数据处理场景均可覆盖,不同方法存在明确的使用边界,部分方法仅能处理对象自身可枚举属性,无法遍历继承属性。
object遍历类方法
Object.keys()会提取目标对象自身可枚举属性的键名,返回由字符串键名组成的数组,你可以直接通过数组遍历方法处理结果,该方法是前端数据解构、表单数据提取的常用方法。该方法不会获取对象原型链上的继承属性,比如自定义原型方法、Object原生原型属性均无法被捕获,仅针对实例自身定义的属性生效。
Object.values()与keys方法逻辑对应,专门提取对象自身可枚举属性的属性值,返回值为属性值数组,支持字符串、数字、对象、数组等任意JS数据类型的属性值提取。日常可用于快速统计对象数值总和、批量筛选对象属性值,适配绝大多数普通对象的数据提取需求。
Object.entries()可同时提取对象自身可枚举属性的键名和属性值,返回二维数组,数组内每一项为[键,值]格式子数组,该方法适配需要同时获取键值、转换对象为Map数据结构的场景,兼容性覆盖ES8及以上浏览器与Node.js10+版本。
object操作修改类方法
Object.assign()用于实现浅拷贝与对象合并,接收多个参数,第一个参数为目标对象,后续参数为源对象,方法会将源对象的可枚举自身属性复制到目标对象并返回。该方法仅支持浅拷贝,若对象属性为数组、嵌套对象等引用类型数据,拷贝后会存在引用地址复用问题,多层级复杂对象合并不建议使用。
Object.freeze()用于冻结目标对象,执行后对象的已有属性无法被修改、删除,也无法新增属性,能有效规避基础数据对象被误篡改的问题。该方法同样仅实现浅层冻结,嵌套的子对象、数组仍然可以被修改,仅适用于单层静态配置对象、常量数据的防护场景。
object属性定义查询类方法
Object.defineProperty()是精准配置对象属性的核心方法,可自定义属性的读写、枚举、删除权限,支持设置value属性值、writable可写性、enumerable可枚举性、configurable可配置性四大核心特性。前端框架响应式原理、私有属性封装大多基于该方法实现,仅适用于需要精细化管控对象属性的定制化场景。
查询对象完整属性配置用Object.getOwnPropertyDescriptors(),该方法能获取对象自身所有属性的完整描述符,包含常规查询无法获取的属性权限配置信息,常配合defineProperty实现属性批量复刻与重置。
| 方法名称 | 核心用途 | 适用场景 | 核心限制 |
|---|---|---|---|
| Object.keys() | 提取对象键名数组 | 遍历对象、提取字段名 | 仅读取自身可枚举属性 |
| Object.assign() | 对象合并、浅拷贝 | 单层对象数据整合 | 不支持引用类型深拷贝 |
| Object.freeze() | 锁定对象属性 | 静态常量对象防护 | 仅实现单层冻结 |
所有Object静态方法均无法处理Symbol类型的不可枚举属性,这是统一使用边界。
这是前端开发高频刚需的对象处理工具集合。
