一、對象創建方式
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 的場景
鍵為復雜類型(如對象)
需要嚴格維護插入順序
高頻增刪鍵值對