← jQuery last()方法:轻松抓取集合中的最后一个元素 没有下一篇了 →

jQuery isNumeric()方法:准确判断一个值是不是数字

原创 2026-05-01 jQuery 已有人查阅

在表单处理和数据校验时,经常需要判断用户输入或者某个变量到底是不是数值。jQuery 的 isNumeric() 方法就是专门解决这个问题的,它能判断传入的参数是否是数字类型或可被解析为数值。这个方法返回一个布尔值,是数字就返回 true,不是就返回 false

这个方法有个值得称道的地方,就是它的判断范围比直觉上要宽泛一些。除了常见的整数、小数、负数,它对十六进制数字(如 0xef)、八进制整数、甚至是指数形式的字符串都能正确识别并返回 true。这意味着在科学计算或颜色值处理这类场景中,它也能派上用场,不需要开发者额外处理格式转换再判断。

语法很简单

$.isNumeric(argument)

只有一个必填参数 argument,就是要被检测的那个值,什么类型都可以往里传。注意调用方式是 $.isNumeric() 而不是 $(selector).isNumeric(),它是一个全局工具方法,不依赖任何 DOM 元素。

示例一:一次性看清哪些值被认为是数字

下面这个例子做了一组系统性的测试。把各种类型的值分别传给 isNumeric(),然后把判断结果显示在两个区域里。上方展示的是返回 true 的各种情况,下方展示的是返回 false 的情况。这样对比着看,对边界条件的理解会非常直观。

<!DOCTYPE html>  
<html>  
<head>  
<title> jQuery isNumeric() 测试示例 </title>  
<script src = "https://ajax.googleapis.com/ajax/libs/jquery/3.5.1/jquery.min.js"> </script>  
<style>  
p {  
font-weight: bold;  
}  
</style>  
</head>  
<body>  
<h2> 代码号学习编程:isNumeric() 方法测试 </h2>  
<p> 以下值的 isNumeric() 检测结果为 true: </p>  
<div id = "d1"> </div>  
<p> 以下值的 isNumeric() 检测结果为 false: </p>  
<div id = "d2"> </div>  
  
<script>  
$( "#d1" ).append("<b> -23 : </b>" + $.isNumeric( -23 )  
+ "<br>" + "<b> 2 : </b>" + $.isNumeric( 2 )  
+ "<br>" + "<b> 0 : </b>" + $.isNumeric( 0 )  
+ "<br>" + "<b> 1.54325890 : </b>" + $.isNumeric( 1.54325890 )  
+ "<br>" + "<b> 1.45 : </b>" + $.isNumeric( 1.45 )  
+ "<br>" + '<b> "0xef" : </b>'+ $.isNumeric( "0xef" )  
+ "<br>" + "<b> 0xef : </b>"+ $.isNumeric( 0xef )  
+ "<br>" + "<b> -0xef : </b>"+ $.isNumeric( -0xef )  
+ "<br>" + "<b> 3.14 : </b>" + $.isNumeric( 3.14 ));  
$( "#d2" ).append('<b> "a" : </b>' + $.isNumeric("a")  
+ "<br>" + "<b> null : </b>" + $.isNumeric( null )  
+ "<br>" + '<b> "null" : </b>' + $.isNumeric( "null" )  
+ "<br>" + "<b> undefined : </b>" + $.isNumeric( undefined )  
+ "<br>" + "<b> false : </b>" + $.isNumeric( false )  
+ "<br>" + "<b> true : </b>" + $.isNumeric( true )  
+ "<br>" + "<b> infinity : </b>"+ $.isNumeric( "infinity" )  
+ "<br>" + "<b>NaN : </b>"+ $.isNumeric( NaN )  
+ "<br>" + '<b> "-0xef" : </b>' + $.isNumeric("-0xef"));  
</script>  
</body>  
</html>  

从运行结果中你会注意到,"0xef" 这种十六进制字符串返回 true,但 "-0xef" 带引号的负十六进制字符串却返回 false。这属于方法内部解析规则的一个边界差异,项目开发中如果涉及十六进制负数的字符串校验,就得自己先用其他方式处理一下,不能依赖这个方法。

示例二:用户输入动态校验

更贴合实际应用的是下面这个场景。页面上放一个文本输入框和一个检测按钮,用户在框里输入任意内容,点击按钮后程序用 isNumeric() 判断输入内容是否为数值,并在页面上给出明确反馈。

<!DOCTYPE html>  
<html>  
<head>  
<title> jQuery isNumeric() 用户输入校验 </title>  
<script src = "https://ajax.googleapis.com/ajax/libs/jquery/3.5.1/jquery.min.js"> </script>  
</head>  
<body>  
<h2> 代码号学习编程:实时检测输入是否为数字 </h2>  
<p> 在下方文本框中输入任意内容。 </p>  
<b> 请输入一个值: </b> <input type = "text">  
<br/>  
<p> 点击按钮检测输入内容是否为数值。 </p>  
<button> 检测 </button>  
<p id = "p1"> </p1>  
<script>  
$(document).ready(function() {  
$("button").click(function() {  
var val = $("input").val();  
var check = $.isNumeric(val);  
  
if (check) {  
$("#p1").html("输入的值 " + "<b>" + val + "</b>"+ " 是数值");  
}  
else {  
$("#p1").html("输入的值 " + "<b>" + val + "</b>"+ " 不是数值");  
}  
});  
});  
</script>  
</body>  
</html>  

注意这里用 $("input").val() 取到的是字符串类型,但 isNumeric() 依然能正确判断字符串里包含的是不是数值,这就是它和 JavaScript 原生 typeof 操作符的区别所在——它关注的是值的语义内容,而不是变量的原始类型。

本节课程知识要点

在我过去的项目经验中,有一段时间我在前端校验里习惯用原生的 isNaN() 来判断,但后来发现 isNaN() 对 null 和空字符串的处理和预期不太一致,偶尔会误判。换成 isNumeric() 之后,逻辑更稳健,代码自解释性也提高了。在 2026 年的开发环境中,如果项目压根没引入 jQuery,用原生的 Number.isFinite() 或 Number.isNaN() 配合 parseFloat 也能达到类似效果,要视具体项目环境而定。

还有一个小建议,isNumeric() 对于 Infinity 和 "infinity" 这种字符串会返回 false,这一点很合理,因为在常规业务逻辑里无穷大通常不应该被当成正常数值来处理。需要校验有限数值的场合,这个方法的表现是符合预期的。

← jQuery last()方法:轻松抓取集合中的最后一个元素 没有下一篇了 →
分享笔记 (共有 篇笔记)
验证码:
微信公众号