DevCN
菜单
全部文章快讯开发深度热点

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 前明确验证文本格式。

DISCUSSION

文章回复

0 条公开回复
未登录回复需要审核后公开
还没有回复,欢迎参与讨论。