构造函数中应立即校验参数:检查必填项与类型(如字符串非空、数值有限、对象含必要字段),非法则抛TypeError;文本白名单清洗,数组/对象深度校验并标准化;用??和解构默认值合理设缺省,区分undefined与null。

构造函数中做参数校验,核心是在实例创建初期就拦截非法值,避免对象处于不一致或不可用状态。不是等调用方法时才检查,而是在 new 的那一刻就确保输入合法、结构完整、类型正确。
构造函数内立即验证必填项和基础类型
对关键参数做存在性与类型判断,用 typeof、Array.isArray()、Number.isFinite() 等原生方法快速兜底:
- 字符串参数必须存在且非空:先
value != null,再typeof value === 'string' && value.trim() - 数值参数不能是
NaN或无穷大:优先用Number.isFinite(value),比!isNaN(value)更严谨 - 对象参数需检查必要字段:用
'id' in obj && 'name' in obj或obj.hasOwnProperty('id') - 遇到非法输入,直接抛错:
throw new TypeError('name must be a non-empty string'),不静默容忍
用白名单过滤字符串类参数
若构造函数接收用户名、标题、标签等文本字段,应在赋值前清洗内容,而非只做“是否为空”判断:
使用约定式提交(Conventional Commits)生成标准化的 Git 提交信息。适用于以下场景: (1) 暂存更改时需要提交信息; (2) 审查 diff 时希望获得结构化摘要; (3) 编写 PR 描述或变更日志(changelog)条目; (4) 用户明确要求“为本次更改编写提交信息”。 该功能会分析已暂存/未暂存的 diff,并生成按类型(type)划分范围的提交信息。
- 定义允许字符集(如中文、英文字母、数字、空格、常见标点),用正则白名单替换非法字符:
value.replace(/[^\u4e00-\u9fa5a-zA-Z0-9\s,。!?、;:“”‘’()【】《》\-.,!?;:(){}\[\]_]/g, '') - 避免用黑名单方式(如逐个禁止符号),容易遗漏且维护困难
- 清洗后若结果为空字符串,按业务逻辑决定是抛错还是设为默认值(如
'未知')
对数组/对象参数做深度校验与标准化
当参数是列表或嵌套结构时,不能只验顶层类型,还要保障内部元素合规:
- 传入用户列表,需遍历每个对象是否含
id和email,且email符合格式:/^[^@]+@[^@]+\.[^@]+$/.test(item.email) - 可配合
Set快速查重或校验黑名单:if (blackSet.has(item.id)) throw new Error('ID is forbidden') - 对原始数据做最小必要转换,比如把字符串数字转为
Number,把时间字符串转为Date实例,并校验有效性
提供合理默认值并明确区分“未传”和“传了 null”
利用参数默认值语法增强健壮性,但注意语义边界:
- 写
options = {}而不是options,防止解构时报错 - 用
??处理null/undefined,不用||(后者会误判0、false、'') - 解构时设字段级默认值:
{ timeout = 5000, retries = 3 } = options - 若业务上“不传”和“传 null”含义不同,应显式判断
options.timeout === undefined

















