函数校验 vs 完全信任参数
完全信任参数
function add(a, b) {
return a + b;
}
add(1, 2); // 3
add("1", "2"); // "12"(字符串拼接,非预期但不会报错)
add(1); // NaN(b 为 undefined)
add(1, 2, 3); // 3(多余参数被忽略)
- 错误往往在深层调用或结果使用时才暴露,难以定位
function getUserName(user) {
return user.name.toUpperCase(); // user 为 null 时直接崩溃
}
函数校验
- 函数入口处主动检查参数
function add(a, b) {
if (typeof a !== "number" || typeof b !== "number") {
throw new TypeError("add: 参数必须是数字");
}
return a + b;
}
add("1", "2"); // 抛出 TypeError,错误立刻暴露
常见校验手段
// 1. typeof / instanceof
if (typeof a !== "number") throw new TypeError(...);
// 2. 空值判断
if (a == null) throw new Error("a 不能为空");
// 3. 参数个数
if (arguments.length < 2) throw new Error("需要 2 个参数");
// 4. 默认值兜底(不算严格校验,但能防 undefined)
function add(a = 0, b = 0) { return a + b; }
更好的方案:用 TypeScript
- 编译期就约束参数
function add(a: number, b: number): number {
return a + b;
}
add(1, 2); // ✅
add("1", "2"); // ❌ 编译报错
原创
JavaScript中函数参数处理
本文采用 CC BY-NC-SA 4.0 许可协议,转载请注明出处。
评论交流
欢迎留下你的想法