数组字面量[]几乎不会创建稀疏数组,而array()构造函数在单个数字参数时明确生成稀疏数组;字面量[,,]是长度为2的稠密数组,0 in [,,]为true,map和foreach执行两次;array(5)是长度为5的稀疏数组,0 in array(5)为false,map等不遍历;多参数时array()与字面量行为一致;初始化稠密数组应使用array.from({length:n})或fill(),避免array(n).map()。

数组字面量([])几乎不会意外创建稀疏数组,而 Array() 构造函数在单个数字参数时会明确生成稀疏数组——这是两者最核心的区别。
当用户要求为 Java 代码添加注释、修改注释、审查注释、整理注释格式,或要求按照代码注释规范处理 Java 文件时,使用本技能。本技能用于统一生成和维护 Java 类注释模板、按 Git 对比 release 判断版本号、补充每行代码上方中文块注释、调整注释空行规则,并保持 Java 文件 UTF-8 无 BOM 编码。典型触发场景包括:补充类注释、更新 @version、检查 @author 来源、整理行尾注释、把注释放到代码上一行、检查注释是否符合规范、构建前检查 Java 注释风格。
字面量创建的“空位”其实是稠密的
写 [,,] 看似跳过元素,但实际创建的是长度为 2、每个索引都存在(值为 undefined)的稠密数组:0 in [,,] 返回 true,map 和 forEach 都会执行两次。
同理,[undefined, undefined] 也是稠密的,行为完全可预测。
构造函数用单个数字参数会真正产生稀疏结构
Array(5) 或 new Array(5) 创建的是长度为 5、但所有索引都不存在的稀疏数组:0 in Array(5) 返回 false,map、forEach、filter 全部不遍历任何项;JSON.stringify(Array(5)) 得到 [null,null,null,null,null](序列化时把空槽转成 null)。
构造函数多参数时反而和字面量一致
只要传入两个及以上参数,或一个非数字参数,Array() 就不再歧义:
• Array(1, 2, 3) → [1, 2, 3](稠密)
• Array('5') → ['5'](稠密)
• Array(null) → [null](稠密)
此时它和字面量行为对齐,但语法更冗长、可读性更低。
想初始化稠密数组,别依赖 Array(n)
如果目标是含 n 个 undefined(或默认值)的数组,应避免 Array(n):
• ✅ 推荐:Array.from({ length: n }) 或 Array(n).fill(undefined)
• ❌ 危险:Array(n).map((_, i) => i) —— 因为原数组稀疏,map 不执行,结果是空数组
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










