Object方法

一、Object.fromEntries(...)

[['key', 'value'], ...] 转成对象

复制代码
const entries= [['a', 1], ['b', 2]]
const newObj = Object.fromEntries(entries); // { a: 1, b: 2 }

二、Object.entries()

把对象转成 [['key', 'value'], ...] 数组

复制代码
const obj = { a: 1, b: 2 };
const entries = Object.entries(obj); // [['a', 1], ['b', 2]]

三、 Object.keys(obj)

获取对象自身可枚举属性的键数组(字符串)。

复制代码
const obj = { a: 1, b: 2 };
Object.keys(obj); // ['a', 'b']

四、Object.values(obj)

获取对象自身可枚举属性的值数组。

复制代码
const obj = { a: 1, b: 2 };
Object.values(obj); // [1, 2]

五、 Object.defineProperty(obj, prop, descriptor)

定义或修改对象的单个属性(支持 getter/setter)。

复制代码
const obj = { a: 1, b: 2 };

Object.defineProperty(obj, 'name', {
  value: 'Vue',
  writable: false, // 不可修改
  enumerable: true  // 可枚举
});             //{a: 1, b: 2, name: 'Vue'}

obj.name='123' //{a: 1, b: 2, name: 'Vue'}
obj.a=5       //{a: 5, b: 2, name: 'Vue'}

六、Object.defineProperties(obj, props)

批量定义多个属性。

七、Object.getOwnPropertyDescriptor(obj, prop)

获取属性的描述符(writable, enumerable 等)。

八、 Object.create(proto, [propertiesObject])

创建一个新对象,指定其原型__proto__)。

复制代码
const parent = { x: 1 };
const child = Object.create(parent);
child.y = 2;
// child.__proto__ === parent

⚠️ Vue 2 响应式原理底层就用到了 Object.defineProperty + Object.create

九、Object.getPrototypeOf(obj)

获取对象的原型(等价于 obj.__proto__,但标准)。

十、 Object.setPrototypeOf(obj, proto)

设置对象的原型(不推荐,性能差)。

十一、 Object.assign(target, ...sources)

浅拷贝合并对象(常用于"混入")。

复制代码
const target = { a: 1 };
const source = { b: 2 };
Object.assign(target, source); // { a: 1, b: 2 }

❗ 注意:只复制可枚举的自身属性 ,且是浅拷贝

十二、 Object.freeze(obj)

冻结对象:不能添加/删除/修改属性(严格模式下会报错)。

复制代码
const obj = { a: 1 };
Object.freeze(obj);
obj.a = 2; // 无效(非严格模式静默失败)

十三、 Object.seal(obj)

密封对象:不能添加/删除属性,但可修改现有属性值。

十四、Object.preventExtensions(obj)

禁止扩展:不能添加新属性,但可修改/删除已有属性。

十五、Object.hasOwnProperty(prop)

判断是否为自身属性(非原型链继承)。

复制代码
obj.hasOwnProperty('a'); // true/false

安全遍历对象

复制代码
for (let key in obj) {
  if (obj.hasOwnProperty(key)) { ... }
}

十六、Object.is(value1, value2)

更严格的相等判断 (修复 === 的缺陷)。

复制代码
Object.is(NaN, NaN); // true (而 NaN === NaN 是 false)
Object.is(+0, -0);   // false

十七、其他实用方法

方法 作用
Object.getOwnPropertyNames(obj) 获取所有自身属性(包括不可枚举)
Object.getOwnPropertySymbols(obj) 获取 Symbol 类型的自身属性
Object.isExtensible(obj) 判断对象是否可扩展
Object.isFrozen(obj) 判断对象是否被冻结
Object.isSealed(obj) 判断对象是否被密封
相关推荐
lihaozecq几秒前
Agent 开发的 skills 机制设计 - 渐进式披露
前端·agent·ai编程
薇茗几秒前
【初阶数据结构】 升沉有序的平仄 排序 3
c语言·开发语言·数据结构·算法·排序算法·文件归并排序
字节高级特工2 分钟前
C++11(一) 革新:右值引用与移动语义
java·开发语言·c++·人工智能·后端
安妮的小熊呢3 分钟前
CRMEB标准版v6.0: 商城DIY装修新升级,PS级自由设计!
运维·javascript·平面·信息可视化·小程序·开源软件
安生生申4 分钟前
uni-app 连接 JDY-31 蓝牙串口模块实践
c语言·前端·javascript·stm32·单片机·嵌入式硬件·uni-app
AI科技星7 分钟前
强哥德巴赫猜想(1+1)终极证明(2026 年5月 21 日)
开发语言·人工智能·算法·计算机视觉·量子计算
Restart-AHTCM8 分钟前
LangChain学习之模型 I/O 与输出解析器 (Output Parsers)(3/8)
前端·学习·langchain
Liu.7748 分钟前
Vue3结合Element Plus封装点击查看大图的自定义指令
javascript·vue.js·elementui
lqj_本人9 分钟前
鸿蒙PC:electron-markdownify 从普通 Electron 迁移到 OpenHarmony Electron HAP 的完整实践
前端·javascript·electron
故事和你9112 分钟前
洛谷-【图论2-4】连通性问题2
开发语言·数据结构·c++·算法·动态规划·图论