JavaScript 中 Object
一、Object 基本概念
JavaScript 的 Object 是存储键值对(属性和方法)的集合,所有对象(如 Array、Function 等)均继承自 Object.prototype
属性名可以是字符串或 Symbol,值可以是任何数据类型(包括其他对象或函数)
二、创建对象的方式
字面量创建(最常用):
let obj = { name: "John", age: 30 };
构造函数创建:
let obj = new Object(); obj.name = "John";
Object.create()(基于原型创建):
let parent = { type: "Parent" }; let child = Object.create(parent); console.log(child.type); // "Parent" :ml-citation{ref="3,7" data="citationList"}
三、常用静态方法
四、实例方法与特性
属性操作:
obj.prop = "value"; // 添加属性 obj["prop"] = "value"; // 动态属性名 delete obj.prop; // 删除属性 :ml-citation{ref="7" data="citationList"}
检测属性:
obj.hasOwnProperty("prop"); // 是否自身属性(非继承) :ml-citation{ref="8" data="citationList"} "prop" in obj; // 是否存在于原型链 :ml-citation{ref="8" data="citationList"}
原型链问题:
所有对象默认继承
Object.prototype
,可能导致原型污染(如通过__proto__
)安全实践:避免直接操作
__proto__
,使用Object.create(null)
创建无原型对象。
五、遍历对象
for...in 循环:遍历对象及其原型链的可枚举属性,需配合
hasOwnProperty
过滤:
for (const key in obj) { if (obj.hasOwnProperty(key)) { console.log(key, obj[key]); } } :ml-citation{ref="1,7" data="citationList"}
Object.keys() + forEach:仅遍历自身属性:
Object.keys(obj).forEach(key => { console.log(key, obj[key]); }); :ml-citation{ref="7" data="citationList"}
六、注意事项
引用类型特性:
Object 作为引用类型,赋值传递的是地址,修改会同步到所有引用该对象的变量与 Map 的对比:
Object 的键只能是字符串或 Symbol,Map 支持任意类型键(如对象、函数)
Map 直接提供
size
属性和迭代方法,更适合频繁增删键值对的场景
// 创建对象 const user = { name: "Alice", greet() { console.log(`Hello, ${this.name}!`); } }; // 合并对象 const details = { age: 25 }; const merged = Object.assign({}, user, details); // {name: "Alice", age:25} :ml-citation{ref="1" data="citationList"} // 遍历属性 Object.entries(merged).forEach(([key, val]) => { console.log(`${key}: ${val}`); // "name: Alice", "age: 25" });