数组创建应统一用字面量[]初始化空数组,array.from()转换类数组,扩展运算符[...arr]复制数组;禁用new array()及new array(n)等易引发稀疏数组问题的写法,并通过eslint规则固化规范。

数组创建方式看似基础,实则直接影响团队代码的可读性、一致性与维护成本。不统一的写法会让同一项目中出现字面量、构造函数、Array.from、扩展运算符等多种风格,增加认知负担和审查难度。
命名与意图表达需匹配数组创建方式
创建数组的目的不同,应选择语义最清晰的方式。比如初始化空列表、转换类数组、复制已有数组,各自有约定俗成的写法。
- 初始化空数组:统一用
[],禁用new Array()(后者在传单个数字时行为异常,如new Array(5)生成长度为5的稀疏数组) - 从类数组或可迭代对象转换:优先用
Array.from(iterable),比[...iterable]更明确表达“转换”意图,且支持映射回调 - 复制数组:使用扩展运算符
[...arr],简洁直观;避免arr.slice()或arr.concat()等旧式写法,降低理解门槛
避免歧义写法,防止隐式陷阱
某些创建方式在团队协作中容易引发误解或运行时问题,规范需明确禁止或限制。
Java开发手册规约集合,基于阿里巴巴Java开发手册(嵩山版)。 涵盖7大维度:编程规约、异常日志、单元测试、安全规约、MySQL数据库、工程结构、设计规约。 当用户需要:(1) 编写或审查Java代码 (2) 检查命名/代码规范 (3) 处理异常和日志 (4) 编写单元测试 (5) 安全编码 (6) 数据库设...
- 禁用
new Array(n):当n为数字时创建稀疏数组,遍历时for...of跳过空位,map返回全undefined,易埋隐患 - 慎用
Array(n).fill(value):虽能创建指定长度填充数组,但需确保value是基本类型或已知可安全复用的对象;复杂对象填充应显式用Array.from({ length: n }, () => ({})) - 不混用
[]与Array():即使Array(1, 2, 3)等价于[1, 2, 3],也应统一为字面量——减少语法分支,降低新人学习成本
配合工具链固化规范
仅靠人工约定难以长期维持,需借助ESLint规则强制执行。
- 启用
no-array-constructor规则,禁止new Array()调用 - 配置
prefer-spread,提示将arr.slice()、Array.prototype.concat()等替换为[...arr] - 结合
no-implicit-coercion,避免因数组创建后误用+[]或![]等隐式转换
文档与示例要覆盖典型场景
团队内部代码规范文档中,应为常见数组操作提供“推荐写法 vs 禁止写法”对照表,例如:
- ✅ 创建含默认值的数组:
Array.from({ length: 3 }, () => 0) - ❌ 错误示范:
new Array(3).fill(0)(若后续修改为new Array(0.5)会抛错) - ✅ 从DOM NodeList转数组:
Array.from(document.querySelectorAll('div')) - ❌ 错误示范:
[].slice.call(document.querySelectorAll('div'))(老旧、难懂)
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










