Array.of() 总是将参数原样转为数组元素,传入 undefined 会生成含 undefined 值的密集数组,如 Array.of(undefined) → [undefined];而 Array(3) 创建稀疏数组,Array.of(3) → [3],二者行为不同。

Array.of() 不会像 Array 构造函数那样对单个数字参数进行特殊处理,它总是将每个参数原样转为数组元素。因此,若传入 undefined,就会得到包含 undefined 的数组,而不是稀疏数组。
Array.of() 如何生成含 undefined 的数组
当你显式把 undefined 作为参数传给 Array.of(),它会如实创建一个值为 undefined 的元素:
-
Array.of(undefined)→[undefined](长度为 1,索引 0 的值是undefined) -
Array.of(1, undefined, 3)→[1, undefined, 3](中间元素就是undefined) -
Array.of(undefined, undefined)→[undefined, undefined]
和 Array() 构造函数的关键区别
很多人混淆 Array.of() 和 Array(),尤其在处理 undefined 时:
-
Array(3)创建长度为 3 的稀疏数组:[empty × 3],没有实际的undefined元素(0 in arr为false) -
Array.of(3)创建普通数组:[3] -
Array(undefined)等价于Array.of(undefined),结果是[undefined]—— 这只是巧合,因为参数恰好是undefined;但Array(5)和Array.of(5)完全不同
实际使用建议
如果你的目标是创建明确包含 undefined 值的数组(比如占位、初始化或测试),直接传参最可靠:
立即学习“Java免费学习笔记(深入)”;
- 用
Array.of(undefined)替代[undefined],语义更清晰 - 避免用
Array(n)期望得到n个undefined—— 它创建的是稀疏数组,遍历时for...in或map()会跳过空槽 - 若需填充
undefined的固定长度数组,可用Array(n).fill(undefined),这样得到的是密集数组
不复杂但容易忽略:Array.of 的“忠实传参”特性,让它成为创建含 undefined 元素数组最直白的方式。


















