Array.of 的核心特点是“原样封装”,所有参数直接作为数组元素,不作类型转换或长度解释,如 Array.of(3) 返回 [3] 而非长度为3的空数组,语义统一且安全可靠。

Array.of 的核心特点是“原样封装”,不区分数字或非数字,所有参数都直接作为数组元素,不存在类型转换或特殊处理。
数字参数不会被当作长度解释
与 Array(3) 会创建一个长度为 3 的空数组不同,Array.of(3) 创建的是 [3] —— 数字 3 是元素,不是长度。同理:
• Array.of(0) → [0]
• Array.of(-5) → [-5]
• Array.of(1, 2, 3) → [1, 2, 3]
非数字参数同样直传不加工
字符串、布尔值、null、undefined、对象、函数等,全部按原值放入数组:
• Array.of("hello") → ["hello"]
• Array.of(true, null, undefined) → [true, null, undefined]
• Array.of({x: 1}, [1,2]) → [{x: 1}, [1,2]]
与 Array 构造函数的关键区别在于语义一致性
Array 构造函数存在二义性:单个数值参数被解释为数组长度;多个参数或非数值单参数才作为元素。而 Array.of 统一按“元素列表”语义执行:
• Array(5) → [empty × 5](稀疏数组)
• Array.of(5) → [5]
• Array("a", "b") 和 Array.of("a", "b") 结果相同,但逻辑更可预测
适合需要可靠构造小数组的场景
尤其在动态生成数组、参数不确定类型时,避免意外行为:
• 工具函数中接收任意参数并转为数组:function makeArray(...args) { return Array.of(...args); }
• 替代 [val] 写法,当 val 可能是数字且需防止误判为长度时
• 与扩展运算符配合自然:Array.of(...iterable) 比 Array(...iterable) 更安全(尤其 iterable 只含一个数字)


















