数组字面量[]更常用安全,array()仅在需创建指定长度空数组等动态场景不可替代;array.from()和array.of()是更现代安全的替代方案。

数组字面量([])和工厂函数(Array())都能创建数组,但适用场景不同:字面量更常用、安全、直观;工厂函数在特定动态场景下有不可替代的作用。
优先用字面量的常见场景
绝大多数日常开发中,直接写 [] 或带初始值的 [1, 'a', {}] 是最佳选择。它语义清晰、性能略优、无歧义。
- 声明空数组或已知元素的数组——如
const list = []、const colors = ['red', 'green', 'blue'] - 配合解构、展开运算符使用——如
const [first, ...rest] = arr、[...arr1, ...arr2] - 作为函数返回值或配置项——如
return { items: [] }、axios.get(url).then(res => res.data.items || [])
必须用 Array() 的少数情况
Array() 的关键价值在于**仅传一个数字参数时,能创建指定长度的空数组**(注意:不是填充了该数字的数组)。这是字面量无法实现的。
- 预分配固定长度的稀疏数组——如
Array(5)创建长度为 5、无实际元素的数组,适合后续按索引赋值:arr[2] = 'x' - 配合
.map()生成序列——Array(5).fill().map((_, i) => i + 1)得到[1,2,3,4,5](fill()避免 map 跳过空位) - 动态控制数组长度——比如根据用户输入生成 n 个占位项:
Array(count).fill(null).map((_, i) => ({ id: i }))
使用 Array() 时需警惕的陷阱
Array(1, 2, 3) 和 Array(3) 行为完全不同:前者是含三个元素的数组,后者是长度为 3 的空数组。传参个数决定语义,容易误用。
- 避免单参数且不确定是否为数字——如
Array(len)中len来自用户输入时,先校验类型或改用Array.from({ length: len }) - 不要依赖
Array(3)创建 [undefined, undefined, undefined]——它实际是稀疏数组,forEach、map不会遍历空位,需fill()或Array.from()补全 - 想创建含单个值的数组,请用
[value]或Array.of(value),而非Array(value)(后者可能被当成长度)
更现代、更安全的替代方案
ES6 引入的 Array.from() 和 Array.of() 明确分离了“按长度创建”和“按参数创建”的意图,推荐在复杂逻辑中优先使用。
-
Array.from({ length: 5 }, (_, i) => i * 2)—— 清晰表达“建 5 个元素,每个按规则计算” -
Array.of(1, 2, 3)—— 稳定返回[1,2,3],不管参数个数或类型 -
Array.from(str)或Array.from(new Set([1,2,2]))—— 可从任意可迭代对象创建数组,字面量和Array()均不支持
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











