js如何判断是数字

js如何判断是数字
最新回答
々依恋瑾滢妍

2022-09-27 22:48:47

在 JavaScript 中,判断一个值是否为数字有多种方法,以下是具体实现及注意事项:

1. isNaN() 函数
  • 作用:检唤锋查值是否为 NaN(非数字),但会先尝试将值转换为数字。
  • 注意:isNaN("123") 返回 false(因为字符串可转为数字),而 isNaN("abc") 返回 true。
  • 示例:console.log(isNaN(123)); // falseconsole.log(isNaN("123")); // false(字符串被转换)console.log(isNaN("abc")); // true
2. Number.isFinite() 函数
  • 作用:严格检查值是否为有限数字(排除 Infinity、NaN 和非数字类型)。
  • 注意:不会进行类型转换,Number.isFinite("123") 返回 false。
  • 示例:console.log(Number.isFinite(123)); // trueconsole.log(Number.isFinite(Infinity)); // falseconsole.log(Number.isFinite("123")); // false(字符逗漏串不通过)
3. typeof 操作符
  • 作用:直接检查值的类型是否为 "number"。
  • 注意:typeof NaN 也返回 "number",需结合其他方法排除 NaN。
  • 示例:console.log(typeof 123 === "number"); // trueconsole.log(typeof NaN === "number"); // true(需额外判断)console.log(typeof "123" === "number"); // false
4. instanceof Number
  • 作用:检查值是否为 Number 对象的实例(如 new Number(123))。
  • 注意:不适用于原始数字类型(如 123)。
  • 示例:console.log(new Number(123) instanceof Number); // trueconsole.log(123 instanceof Number); // false(原始类型不通过)
5. parseInt() 和 parseFloat()
  • 作用:尝试将字符串解析为整数或浮点数,失败返回 NaN。
  • 注意:仅适用于字符串解析,且会忽略非数字后缀(如 "123abc" 返回 123)。
  • 示例:console.log(parseInt("123") === 123); // trueconsole.log(parseInt("123abc") === 123); // true(部分解析)console.log(parseInt("abc") === NaN); // false(实际返回 NaN)
最佳实践推荐
  • 严格判断原始数字:使用 typeof val === "number" && !isNaN(val),排除 NaN 和非数字类型。

    function isNumber(val) { return typeof val === "number" && !isNaN(val);}console.log(isNumber(123)); // trueconsole.log(isNumber(NaN)); // falseconsole.log(isNumber("123")); // false
  • 宽松判断(含可转换字符串):使用 !isNaN(parseFloat(val)) && isFinite(val),允许字符串数字。

    function isNumeric(val) { return !isNaN(parseFloat(val)) && isFinite(val);}console.log(isNumeric("123")); // trueconsole.log(isNumeric("123abc")); // false(严格模式)
总结
  • 原始山链烂数字:typeof + Number.isFinite()。
  • 可转换字符串:parseFloat + isFinite。
  • 避免陷阱:isNaN() 会转换类型,instanceof 不适用于原始类型。

根据需求选择合适的方法,确保覆盖边界情况(如 NaN、Infinity、字符串数字等)。