JavaScript 入门:拒绝空字符串并计算有效学习时长
将文本时长转成数字,区分空文本、无效数字和非整数,用显式验证防止类型转换悄悄改变业务含义。
本节目标
将文本时长转成数字,区分空文本、无效数字和非整数,用显式验证防止类型转换悄悄改变业务含义。
环境与运行方法
准备 Node.js 22 或更新版本。把完整代码保存为 lesson.mjs,执行 node lesson.mjs。本组示例使用命令行标准输出,不依赖浏览器 DOM,也不安装第三方包。
核心思路
Number 能转换多种文本,但空字符串会变成零;Number.isFinite 检查真正有限的数值,Number.isInteger 再确认整数。先验证文本非空,再转换和限制范围,比依赖隐式转换更容易检查。
完整示例
function minutes(text) {
if (typeof text !== "string" || text.trim() === "") return null;
const value = Number(text);
return Number.isInteger(value) && value >= 0 && value <= 1440
? value : null;
}
for (const text of ["30", "", "12.5", "0"]) {
const value = minutes(text);
console.log(value === null ? "invalid" : "ok=" + value);
}预期输出
ok=30
invalid
invalid
ok=0逐步理解
返回 null 表示失败,合法零通过 value===null 的严格判断保留下来。如果写成 if(!value),零会被误认为无结果。本函数也明确拒绝非字符串,避免把 null、true 等值直接转换成时长。
这里沿用 Number 的数字文本规则,科学计数法等形式可能被接受。如果只允许十进制数字字符,应额外使用正则定义格式。const 限制变量重新绑定,不代表它指向的对象不可变。
常见问题与边界
- NaN 与自身也不相等,应使用专门检查而不是 ==NaN。
- 空字符串转换为零不意味着它是合法记录。
- 超出安全整数范围的数值需要其他表示;本例上限很小。
动手练习
加入 "1441"、" 45 "、"-1" 与 "1e2"。
参考答案
前三项分别是失败、45、失败;1e2 按本契约得到 100。若不接受指数形式,应在 Number 前明确验证文本格式。
文章回复
0 条公开回复