最推荐用字面量[]创建数组;构造函数new array()易引发稀疏数组问题,仅适用于动态指定长度等特定场景;array.from()和展开运算符专用于类数组或可迭代对象的转换。

最推荐用字面量 [] 创建数组,它语义清晰、性能稳定、行为可预测;构造函数 new Array() 仅在特定动态场景下有用,但参数逻辑反直觉,容易引发稀疏数组问题;Array.from() 和展开运算符则适用于从类数组或可迭代对象转换的明确需求。
字面量创建:简洁安全,日常首选
直接写 const arr = [1, 'a', true] 是最直观、最高效的方式。它明确表达了“我要一个含三个元素的数组”,引擎能快速分配连续内存,且不会产生空槽(sparse slots)。无论元素类型如何混合,语法一致、调试友好、团队协作成本低。
- 支持多行书写,提升长数组可读性
- 不会因单个数字参数误创建稀疏数组
- ESLint 和 TypeScript 都默认鼓励此写法
构造函数创建:谨慎使用,注意歧义
new Array() 行为取决于参数个数和类型,容易踩坑:
-
new Array(5)→ 长度为 5 的稀疏数组([empty × 5]),map、forEach不会遍历这些空位 -
new Array(1, 2, 3)→ 等价于[1, 2, 3],但语义不如字面量直接 -
new Array('hello')→['hello'],看似合理,但和new Array(5)共享同一接口,易混淆
除非需要动态生成指定长度的数组并配合 fill()(如 new Array(10).fill(0)),否则没必要用构造函数。
Java项目代码review工具。分析Git变更+完整调用链路上下文,推断业务需求,进行多维度评分和分类汇总,生成完整PRD文档。包含细粒度Java代码审查清单(Null安全、异常处理、Streams、并发、equals/hashCode、资源管理、API设计、性能、MyBatis/ORM、事务边界、SQL/DD...
Array.from 与展开运算符:面向转换场景
当目标不是“新建空数组”而是“把别的东西变成数组”时,这两个方法更准确、更现代:
-
Array.from('abc')→['a','b','c'](字符串转数组) -
Array.from({length: 3}, (_, i) => i * 2)→[0, 2, 4](带映射的定长数组) -
[...arrayLike]或[...document.querySelectorAll('div')]更简洁地替代已废弃的Array.prototype.slice.call()
它们明确表达“转换”意图,且对空槽、NaN、迭代器等边界情况处理更一致。
避免隐式陷阱:类型校验与稀疏数组意识
实际开发中,数组常来自 API 或用户输入,不能假设它一定是“标准数组”:
- 用
Array.isArray(value)做前置校验,防止对非数组调用map等方法报错 - 识别稀疏数组:
arr[0] === undefined不等于0 in arr,后者为false表示该索引根本不存在 - 需要“密集数组”语义时(如用
map初始化值),优先用Array(n).fill().map(...)而非new Array(n).map(...)
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










