Array.of() 总是将参数逐个作为数组元素,无歧义:Array.of(3) 返回 [3],而 Array(3) 创建长度为3的空位数组;不传参时两者均返回[],但 Array.of(undefined) 明确返回 [undefined]。

Array.of() 创建空数组时,不会像 Array(3) 那样生成带空位(empty slots)的稀疏数组,而是严格按传入参数个数创建对应长度的数组,每个元素都显式设为 undefined —— 这是它最核心的行为特征。
Array.of() 与 Array() 构造器的关键区别
当不传参或传入一个数字时,两者表现截然不同:
-
Array.of()→ 返回[](长度为 0 的空数组,无空位) -
Array()→ 同样返回[](行为一致) -
Array.of(3)→ 返回[3](一个元素,值为数字 3) -
Array(3)→ 返回[empty × 3](长度为 3 的稀疏数组,不含实际元素)
Array.of() 总是按参数逐个赋值
无论参数类型或数量如何,Array.of() 都将每个参数作为数组的一个独立元素:
-
Array.of(undefined)→[undefined](1 个元素,值明确为undefined) -
Array.of(null, 0, "a")→[null, 0, "a"] -
Array.of()→[](0 个元素) - 即使传入
NaN、Symbol()或对象,也照常放入数组,不做特殊处理
为什么它“更可靠”地创建预期数组
传统 Array() 构造器对单个数字参数有特殊逻辑(视为初始化长度),容易引发意外;而 Array.of() 消除了这种歧义:
立即学习“Java免费学习笔记(深入)”;
- 想创建含数字
5的数组?用Array.of(5),不是Array(5)(后者是长度为 5 的空数组) - 想创建
[undefined, undefined]?必须写Array.of(undefined, undefined),不能依赖Array(2)(那是稀疏数组,map等方法会跳过空位) - 在函数参数转发场景中(如
Array.of(...args)),行为始终可预测,不会因参数个数变化触发构造器的重载逻辑
实际使用中的注意事项
虽然语义清晰,但需注意两点:
- 它不进行类型转换或过滤,
Array.of("1", "2", "3")就是字符串数组,不会自动转成数字 - 它不处理类数组对象或迭代器,要转换类数组请用
Array.from(),而非Array.of() - 兼容性良好,现代浏览器和 Node.js 环境均支持(ES6+)


















