JavaScript如何简便判断变量是否为数字?自定义校验函数求验证
JS变量数字校验逻辑校验结论
你的validateNumber逻辑合理性说明
你的核心判断逻辑在绝大多数普通业务场景下是可用的,现有逻辑的合理点如下:
- 用
num !== num判断NaN是JS原生的标准实现,符合JS语言特性,因为只有NaN满足不等于自身的规则,你将NaN统一返回0的处理符合你的求和需求 - 后续通过
typeof num === 'number'做类型校验,正确过滤了字符串、null、undefined、空值等非数字类型的入参 - 你给出的示例调用运行结果正确,最终输出为
39.4,和7+8+9+5.4+10的计算结果一致
现有逻辑可优化点
你当前的逻辑存在两处边界情况遗漏,可以根据你的业务需求调整:
- 遗漏了
Infinity/-Infinity的处理:这两个值的typeof结果也是number,且满足num === num的判断,如果你传入无穷大作为参数,现有逻辑会将其当做有效数字参与计算,若你不需要将无穷大算作有效数字,可新增isFinite()判断 - 若你有兼容数字格式字符串的需求(比如把
'123'、'4.5'这类内容为数字的字符串也当做有效数字转换后求和),现有逻辑不会处理这类值,会直接返回0,可调整为转成Number后再判断
你可以直接使用优化后的简化版本,和你原有逻辑核心需求一致,更简洁:
const validateNumber = num => typeof num === 'number' && !isNaN(num) && isFinite(num) ? num : 0
如果需要兼容数字格式字符串,可以用下面的实现:
const validateNumber = num => { const parsedVal = Number(num) return !isNaN(parsedVal) && isFinite(parsedVal) ? parsedVal : 0 }
内容的提问来源于stack exchange,提问作者Deepak Koshy
相关产品推荐
相关产品推荐

