JavaScript Object 操作方法及 API
一、对象创建方式
1.字面量创建(最常用)
const obj = { name: "张三", age: 25 };
2.构造函数创建
const obj = new Object();
obj.name = "李四";
3.Object.create()(指定原型)
const proto = { greet: () => "Hello" };
const obj = Object.create(proto); // obj继承proto
二、核心 API 详解
1.属性操作
添加/修改属性:
obj.city = "北京"; // 直接赋值
- 删除属性:
delete obj.age; // 删除age属性
2.Object.assign()(浅拷贝合并对象)
const target = { a: 1 };
const source = { b: 2 };
Object.assign(target, source); // { a:1, b:2 }
3.遍历方法
Object.keys(obj)
:返回键数组
Object.keys({x:3, y:4}); // ["x", "y"]
Object.values(obj)
:返回值数组Object.entries(obj)
:返回键值对二维数组
Object.entries({x:3, y:4}); // [["x",3], ["y",4]]
4.Object.fromEntries()(键值对转对象)
const entries = [["x", 3], ["y", 4]];
Object.fromEntries(entries); // {x:3, y:4}
5.属性描述符操作
- 定义属性特性:
Object.defineProperty(obj, "id", {value: 1001,writable: false, // 不可修改enumerable: true // 可遍历
});
- 获取描述符:
Object.getOwnPropertyDescriptor(obj, "id");
三、关键特性总结
1.键名类型
- 仅支持 字符串 或 Symbol 类型(与 Map 的核心区别)
const key = Symbol("secret");
obj[key] = "值";
2.无序性
属性遍历顺序不固定(与 Map 有序性相反)
3.原型链
所有对象默认继承
Object.prototype
检查原型链:
console.log(obj instanceof Object); // true
4.与 Map 的对比
特性 | Object | Map |
---|---|---|
键类型 | 字符串/Symbol | 任意类型 |
顺序保证 | ❌ 无序 | ✅ 有序 |
专用遍历方法 | ❌ | ✅ keys()/values() |
性能 | 读取快 | 频繁增删快 |
四、最佳实践场景
适合 Object 的场景
结构化固定数据(如配置项)
需要 JSON 序列化的数据
简单键值存储(键为字符串时)
优先选 Map 的场景
键为复杂类型(如对象)
需要严格维护插入顺序
高频增删键值对