对象(Object)和数组(Array)
在前端开发(尤其是JavaScript中),对象(Object)和数组(Array)是两个最常用的数据结构,
但它们有不同的特性和适用场景。以下是详细对比和分析:
1. 对象(Object)
定义:键值对(Key-Value)的集合,键是字符串或 Symbol,值可以是任意类型。
特点:
无序性:对象的属性没有顺序(虽然现代引擎会优化存储顺序,但逻辑上无索引)。
键的唯一性:每个键唯一,重复键会覆盖。
用途:存储结构化数据,如用户信息、配置项等。
示例:
const user = { name: "Alice", age: 25, isAdmin: true };
操作方法:
// 读取属性 user.name; // "Alice" user["age"]; // 25 // 添加/修改属性 user.email = "alice@example.com"; // 删除属性 delete user.isAdmin;
2. 数组(Array)
定义:有序的元素集合,索引从
0
开始递增。特点:
有序性:元素按插入顺序排列,可通过索引访问。
动态长度:长度自动调整,可随时增删元素。
用途:存储列表数据,如待办事项、搜索结果等。
示例:
const todos = ["Learn JS", "Write code", "Review PRs"];
操作方法:
// 访问元素 todos[0]; // "Learn JS" // 添加元素 todos.push("Debug"); // 末尾添加 todos.unshift("Plan"); // 开头添加 // 删除元素 todos.pop(); // 删除末尾 todos.shift(); // 删除开头 // 遍历 todos.forEach((task) => console.log(task));
4. 互相转换
对象 → 数组
场景:将对象的键值对转为数组。
const obj = { a: 1, b: 2 }; const arr = Object.entries(obj); // [ ["a", 1], ["b", 2] ]
数组 → 对象
场景:将数组转为键值对结构。
const arr = [ ["a", 1], ["b", 2] ]; const obj = Object.fromEntries(arr); // { a: 1, b: 2 }
5. 常见使用场景
对象:
存储 API 返回的 JSON 数据(如用户信息)。
动态配置项(如主题颜色、国际化字段)。
数组:
渲染列表(如使用
map()
生成 React 组件)。处理批量数据(如排序、过滤、统计)。
6. 注意事项
对象的键类型:
键只能是字符串或 Symbol,其他类型会隐式转换为字符串。
例如:
obj[1]
和obj["1"]
是同一个键。稀疏数组:
数组中可能存在“空洞”(如
const arr = [1,,3]
),需谨慎处理。深浅拷贝问题:
对象和数组是引用类型,直接赋值会共享内存地址,需使用
JSON.parse(JSON.stringify())
或扩展运算符(...
)进行深拷贝。