Array.of的核心优势在于行为统一、语义明确、边界安全,始终将参数原样转为数组元素,避免Array()因单数字参数引发的长度歧义、类型异常与条件判断耦合。
Array.of 在代码重构中取代 Array() 构造函数,核心优势在于行为统一、语义明确、边界安全——它把“传什么就放什么”变成可预测的硬规则,而不是依赖参数个数和类型的隐式判断。
重构时最常踩的坑,就是把原本写死的 Array(1, 2, 3) 拆成变量传入,比如:
const id = 42; → Array(id) 会意外生成长度为 42 的空数组,而非 [42]
Array(id) 可能突然抛出 RangeError(如传入负数或非整数浮点数)Array.of(id) 则始终返回 [42],无论 id 是数字、字符串、null 还是对象旧代码常需手动判断参数数量再选择创建方式:
if (args.length === 1) arr = [args[0]];else arr = Array.apply(null, args);Array.of(...args),一行替代多行,逻辑扁平化,可读性与可维护性同步提升Array.of 不做任何隐式转换或 length 推断,这对重构中保留原始数据意图至关重要:
立即学习“Java免费学习笔记(深入)”;
Array.of(undefined) 明确生成 [undefined](一个含 undefined 元素的数组)Array(undefined) 却创建长度为 1 的空槽位数组([empty]),二者在 map、forEach 中行为完全不同在封装工具函数、编写通用处理器或对接 FP 库时,Array.of 提供稳定输入接口:
const createList = (...items) => Array.of(...items); —— 无需关心调用方传一个还是多个pipe 或 compose 链式调用时,不会因参数个数变化破坏管道一致性[] 字面量,它支持动态参数透传;相比 new Array(),它不引入歧义副作用不复杂但容易忽略:重构不是只改结构,更是把隐式约定显性化。Array.of 把“数组该是什么”这件事,交还给开发者自己决定,而不是交给构造函数那套模糊的重载规则。