array.of 专注将参数直接转为数组元素,不解释参数类型或数量;array.from 专注将类数组或可迭代对象转为数组,并支持转换时映射加工。

两者都能生成数组,但出发点完全不同:Array.of 是为解决构造函数歧义而生的“参数转数组”工具;Array.from 是为统一转换逻辑而设的“对象转数组”桥梁。
Array.of:专注把参数变成数组元素
它不关心参数是什么类型、有多少个,一律按顺序塞进新数组里。哪怕只传一个数字,也绝不会误当成数组长度。
- Array(5) → 创建长度为 5 的空数组([empty × 5])
- Array.of(5) → 创建含单个元素 5 的数组([5])
- Array.of("a", 2, true) → [ "a", 2, true ]
- Array.of() → [](空数组)
Array.from:专注把结构转成数组实例
它要求输入对象满足“类数组”或“可迭代”条件——要么有 length 属性且索引从 0 开始,要么实现了 Symbol.iterator。字符串、NodeList、Set、Map、甚至手动加了 length 的普通对象,都行。
- Array.from("ab") → [ "a", "b" ](字符串被拆成字符)
- Array.from({length: 3}) → [ undefined, undefined, undefined ]
- Array.from(new Set([1,2,2])) → [ 1, 2 ](去重后转数组)
- Array.from(document.querySelectorAll("div")) → DOM 节点列表转真数组
关键差异在输入契约和默认行为
Array.of 对参数完全放行,不做任何解释;Array.from 则严格校验输入是否具备可遍历性或类数组特征,否则会报错或返回空数组。
- Array.of(null, undefined, 0) → [ null, undefined, 0 ]
- Array.from(null) → TypeError(null 不可迭代也不类数组)
- Array.from([1,,3]) → [ 1, undefined, 3 ](空槽位转为 undefined)
- Array.of([1,,3]) → [ [1, , 3] ](整个数组作为单个元素)
额外能力:Array.from 支持一步映射
它内置 map 功能,能在转换同时加工数据,避免链式调用。
- Array.from([1,2,3], x => x * 2) → [ 2, 4, 6 ]
- Array.from({length: 5}, (_, i) => i) → [ 0, 1, 2, 3, 4 ](生成序列)
- Array.of 没有这个能力,如需加工,得后续调用 map
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











