一、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) |
判断对象是否被密封 |