JavaScript 中最短的数字类型判断代码实现

作者:清欢时间:2026-10-23 10:57:10浏览:575

本文探讨JavaScript中判断数字类型的最短代码写法。从基础的typeof运算符出发,逐步优化以处理NaN和浮点数。最终介绍利用JS动态语言特性,通过obj === +obj实现的最短数字判断方法,并延伸讨论字符串与布尔类型的类似技巧。

JavaScript 数字类型判断的演进

JavaScript 提供了 typeof 运算符,因此最直观的思路是使用它来检查变量是否为 number 类型。


function isNumber(obj) {
  return typeof obj === 'number'
}

该函数能正确识别整数和浮点数,但对 NaN 值也会返回 true。这在实际应用中并不理想,因为通过 isNumber 检查后,通常不会期望使用 NaN 进行算术运算。

为了改进这一点,可以尝试使用 Object.prototype.toString 进行判断。


function isNumber(obj) {
  return Object.prototype.toString.call(obj) === '[object Number]'
}

这种方式与 typeof 类似,对 NaN 同样返回 true,且代码量反而增加,并非理想结果。虽然 toString.call 方式判断数组 (Array) 可行,但在处理数字时显得力不从心。

进一步改进,引入 isNaN 函数来处理 NaN 值。


function isNumber(obj) {
  return typeof obj === 'number' && !isNaN(obj)
}

经过这次修改,如果传入的是非数字(NaN 或可转换为 NaN 的值),函数将返回 false。


function isNumber(obj) {
  return typeof obj === 'number' && !isNaN(obj)
}
isNumber(1)  // true
isNumber(1.2) // true
isNumber(NaN) // false
isNumber( parseInt('a') ) // false 

这个 isNumber 实现已经不错,但还有另一种等价的方法,即使用 isFinite 进行判断。


function isNumber(obj) {
  return typeof obj === 'number' && isFinite(obj)  
}

到目前为止,文中提到的第三个使用 isNaN 函数的方案是最短代码的代表。接下来将隆重推出目前公认的最短数字判断代码。

最短数字判断代码:利用隐式转换


function isNumber(obj) {
  return obj === +obj
}

该代码对整数和浮点数返回 true,对 NaN 或可转换为 NaN 的值返回 false。

如果对此感到困惑,不必惊讶。

有读者指出这还不是世界上最短的判断数字代码,参数 obj 可以简化为一个字符。你是对的。

举一反三,利用 JavaScript 动态语言特性(运算符运算时内部自动类型转换),还可以找到其他类似的极简判断方式。

其他类型的极简判断技巧


// 判断字符串
function isString(obj) {
  return obj === obj+''
}
// 判断布尔类型
function isBoolean(obj) {
  return obj === !!obj
}

总结

以上介绍了 JavaScript 中最短的数字判断代码实现。如果对大家有帮助,欢迎转载并注明出处。如有任何疑问,欢迎留言讨论。感谢支持!

作者最新文章