在JavaScript开发过程中,准确判断变量是否为数字是基础且重要的操作,不同的检测方式对应不同的使用场景,下面为大家介绍4种常用的数字类型检测技巧。

一、使用typeof运算符判断
typeof是JavaScript中最基础的类型判断运算符,对于普通的数字类型变量,它可以返回正确的结果。
// 基础数字判断
let num1 = 123;
let num2 = 3.14;
let str = '123';
let obj = {};
console.log(typeof num1 === 'number'); // true
console.log(typeof num2 === 'number'); // true
console.log(typeof str === 'number'); // false
console.log(typeof obj === 'number'); // false
这种方法的局限性是,对于NaN和Infinity这两个特殊的数字值,typeof也会返回number,无法区分普通数字和这两个特殊值。
console.log(typeof NaN === 'number'); // true console.log(typeof Infinity === 'number'); // true
二、结合isNaN判断非数字值
isNaN函数用于判断一个值是否为NaN,我们可以利用它排除NaN的情况,再结合typeof判断是否为数字。
function isNumber1(val) {
// 先判断类型是否为number,再排除NaN的情况
return typeof val === 'number' && !isNaN(val);
}
console.log(isNumber1(123)); // true
console.log(isNumber1(NaN)); // false
console.log(isNumber1('123')); // false
console.log(isNumber1(Infinity)); // true
如果需要同时排除Infinity,可以额外添加判断条件。
function isNumber2(val) {
return typeof val === 'number' && !isNaN(val) && isFinite(val);
}
console.log(isNumber2(Infinity)); // false
console.log(isNumber2(-Infinity)); // false
三、使用Number.isFinite判断
ES6新增的Number.isFinite方法可以直接判断一个值是否为有限的数字,它不会进行类型转换,只对数字类型的有限值返回true。
console.log(Number.isFinite(123)); // true
console.log(Number.isFinite(3.14)); // true
console.log(Number.isFinite('123')); // false
console.log(Number.isFinite(NaN)); // false
console.log(Number.isFinite(Infinity)); // false
这个方法的优势是逻辑清晰,不需要组合多个判断条件,但是不支持ES6以下的环境,如果需要兼容旧环境,需要做polyfill处理。
四、使用正则匹配判断可转换的数字字符串
如果需求是判断一个字符串是否可以转换为数字,或者判断变量是否为数字(包含可以转换为数字的字符串),可以使用正则表达式匹配。
function isNumber3(val) {
// 匹配整数、小数、正负号,排除空字符串和非数字字符
const reg = /^-?d+(.d+)?$/;
return reg.test(String(val));
}
console.log(isNumber3('123')); // true
console.log(isNumber3('3.14')); // true
console.log(isNumber3('-100')); // true
console.log(isNumber3(123)); // true
console.log(isNumber3('12a3')); // false
console.log(isNumber3('')); // false
这种方法的适用场景是校验用户输入的数字字符串,或者需要把字符串形式的数字也判定为数字的情况,但是无法处理科学计数法形式的数字字符串。
四种方法对比
下面通过表格整理四种方法的适用场景和特点:
| 方法 | 适用场景 | 局限性 |
|---|---|---|
| typeof判断 | 快速判断变量基础类型是否为number | 无法区分NaN、Infinity和普通数字 |
| typeof+isNaN组合 | 判断是否为非NaN的数字类型 | 需要组合多个条件,Infinity仍会被判定为数字 |
| Number.isFinite | 判断是否为有限数字,逻辑简洁 | 不兼容ES6以下环境 |
| 正则匹配 | 判断字符串或可转换为数字的变量 | 无法处理科学计数法,不适合纯数字类型判断 |
开发者可以根据实际业务需求选择合适的数字判断方法,日常开发中如果需要严格判断变量是否为有限数字,优先推荐使用Number.isFinite方法。
JavaScript变量类型检测数字判断isNaNtypeof修改时间:2026-07-04 20:30:28