You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何校验unknown类型值是否为有效数字?修复现有校验函数问题

问题:数值校验函数逻辑错误

给定一个unknown类型的值,以及一个指定该值必须为整数或浮点数的配置,编写了如下校验函数:

function isValueNumber(value: unknown, isAcceptingFloatingPointNumbers: boolean) {
  if (Number.isNaN(value)) {
    return false;
  }
  
  if (!isAcceptingFloatingPointNumbers) {
    return Number.isInteger(value);
  }
  
  return true;
}

调用isValueNumber("this is not a valid number", true)时,函数返回true,不符合预期。原因是Number.isNaN仅会对NaN值返回true,非数值类型的参数(比如字符串)会直接返回false,导致后续逻辑错误放行非数值类型。

修复方案

要正确校验数值类型,需要先判断值的类型是否为number,再排除NaN和Infinity这类无效数值,最后根据配置判断是否接受浮点数:

function isValueNumber(value: unknown, isAcceptingFloatingPointNumbers: boolean) {
  // 首先判断是否为number类型,排除非数值类型
  if (typeof value !== 'number') {
    return false;
  }
  // 排除NaN和正负Infinity
  if (Number.isNaN(value) || !Number.isFinite(value)) {
    return false;
  }
  // 不接受浮点数时,校验是否为整数
  if (!isAcceptingFloatingPointNumbers) {
    return Number.isInteger(value);
  }
  // 接受浮点数时,直接返回true(已经通过前面的有效数值校验)
  return true;
}

关键修复点:

  • 增加typeof value !== 'number'判断,直接排除所有非数值类型的输入;
  • 加入Number.isFinite校验,排除Infinity和-Infinity这类无意义的数值;
  • 确保只有合法的数值类型才会进入后续的整数/浮点数判断逻辑。

内容的提问来源于stack exchange,提问作者baitendbidz

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.05 07:50:10