array.of()的核心优势是不拆解、不解释、原样封装,将每个参数作为独立元素直接放入新数组,无论类型多特殊或嵌套多深,均保持结构完整且无类型转换。

Array.of() 在处理复杂数据结构时,核心优势在于“不拆解、不解释、原样封装”——它把每个传入参数当作独立元素,无论类型多特殊、嵌套多深,都直接放进新数组。
能直接容纳任意类型的值
对象、数组、函数、null、undefined、Symbol、甚至 Promise 实例,全都能作为单个元素被保留下来,不会被展开或转换:
-
Array.of({name: "Alice"}, [1, 2], null, undefined)→[{name: "Alice"}, [1, 2], null, undefined] -
Array.of(new Date(), /regex/, function() {})→ 数组里就是这三个原始引用,结构完整 - 传入
NaN或Infinity也照收不误,不会变成0或触发类型 coercion
避免嵌套结构被意外扁平化
相比扩展运算符 [...iterable] 或 Array.from()(默认遍历),Array.of() 不会尝试展开任何东西:
-
Array.of([1, 2], [3, 4])→[[1, 2], [3, 4]](两个子数组) - 而
[...[[1, 2], [3, 4]]]→[[1, 2], [3, 4]]结果相同,但这是靠展开逻辑;若传入的是 Set 或 Map,Array.of()仍保持原对象,[...set]则会转成值数组 - 对类数组对象(如
{0: 'a', 1: 'b', length: 2}),Array.of()把它当一个整体元素,Array.from()才会按索引提取
适合构建配置型、元数据型数组
当数组本身是“容器”而非“序列”,比如描述字段规则、API 请求参数、组件 props 组合时,Array.of() 让意图更清晰:
const fieldConfig = Array.of({key: 'email', required: true}, {key: 'avatar', type: 'file'})const apiBatch = Array.of({id: 101, action: 'update'}, {id: 102, action: 'delete'})- 这些不是要遍历计算的数值序列,而是需要保持每个对象完整语义的集合 ——
Array.of()天然契合这种用途
与动态参数配合更安全
函数接收不定参数(...args)后,想转成数组保存或传递,用 Array.of(...args) 比 new Array(...args) 更可靠:
- 假设
function createItem(...params) { return Array.of(...params); } - 调用
createItem(42)→[42];createItem([1,2])→[[1,2]];createItem()→[] - 如果误用
new Array(...params),传入单个数字就会出错,而Array.of无此风险
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











