有时需要根据输入的内容进行估算。 这时需要判断输入的内容是否为数字。 下面文章主要介绍JavaScript判断是否为数字的几种形式。 文章通过示例代码介绍的特别详细,有需要的同学可以参考以下
目录
前言
js判断是否为数字的方法有很多种:
Typeof、instanceof、Number.isNumberparseInt、parseFloatisNaN、isFiniteNumber.isNaN、Number.isFinite正则表达式终极解决方案
我们一一介绍,希望对您有所帮助。
1. typeof、instanceof、Number.isInteger
typeof 判断该值是否为基本类型编号javascript 数字判断,例如:
let num = 1;
typeof num === 'number'; // true
instanceof 判断该值是否是包装类 Number,例如:
let num = new Number(1);
num instanceof Number; // true
Number.isInteger 判断该值是否为整数:
Number.isInteger(1); // true
Number.isInteger('1'); // false
Number.isInteger(1.1); // false
这些方法的缺点是只能根据类型来判断,无法判断字符串是否为值。
2.parseInt、parseFloat
该方法的属性,一句话,返回字符串开头的最长有效数字。
我们可以使用 !isNaN(parseFloat(value)) 来判断一个字符串是否是一个值。
let str1 = '123';
let str2 = 'abc';
!isNaN(parseFloat(str1)); // true,是数字
!isNaN(parseFloat(str2)); // false,不是数字
解析parseInt和parseFloat时,遇到非法字符,则返回解析后的值。 也就是说,只要字符串后面是合法的值,就可以解析该值,即使整个不是值。 例如,123abc 将被解析为 123。
因此,上述判别方法不够严格,下面的终极解决方案是更严格的方法。
3.isNaN、isFinite
在介绍这两个方法之前,我们先来说说NaN,即Not-a-Number。 直接比较两个 NaN 是否相等是很困难的,因为我们只知道它们不是数字,并且它们是什么是不确定的,因此很难比较它们是否相等。
NaN === NaN; // false
NaN == NaN; // false
Object.is(NaN, NaN); // false
isNaN 和 isFinite 会先将传入的值转换为一个值,然后再进行判断。 ToNumber 的规则与直接使用 Number 函数相同。 一些非数字值在类型转换时可以转换为数字值,例如:
Number(true); // 1
Number(false); // 0
Number(null); // 0
Number(''); // 0
对null、true、false、''使用isNaN的结果都是false,但它们本身并不是数字,所以isNaN不能单独使用。
4. Number.isNaN、Number.isFinite
这两个方法与相应的全局方法不同。
不同的是,全局方法会有强制类型转换,而这两个方法没有强制类型转换:
Number.isNaN(null); // true
Number.isNaN(true); // true
Number.isNaN(false); // true
Number.isNaN(''); // true
可以看到,由于没有进行类型转换,所以Number.isNaN判断null、true、false、''的结果都是true。
但“副作用”是数字字符串也变为 true:
Number.isNaN('123'); // true
Number.isNaN 相当于:
Number.isNaN = Number.isNaN || function(value) {
return typeof value === "number" && isNaN(value);
}
Number.isFinite 相当于:
if (Number.isFinite === undefined) Number.isFinite = function(value) {
return typeof value === 'number' && isFinite(value);
}
因此,这两种方法本质上也是基于类型的,无法判断一个字符串是否是一个值。
5.正则表达式
let exp = /^[+-]?d*(.d*)?(e[+-]?d+)?$/;
exp.test('+1.9'); // true
exp.test('-.1e11'); // true
这种正则化可以确定整数、浮点数、正数和负数以及科学记数法。
不过我觉得判断是否是数值有点大材小用了。
6.终极解决方案(推荐)
我们先看一下计划:
!isNaN(parseFloat(value)) && isFinite(value);
这显然就是Jquery中$.isNumeric的源码,多么简单又柔和。
接下来我们来看看它的原理。 我们以字符串 123abc 为例javascript 数字判断,我们应该得到 false。
parseFloat('123abc') 得到 123; !isNaN(123) 为 true; isFinite('123abc') 为 false; 最终结果是假的。
单独使用 !isNaN(parseFloat(value)) 会将 123abc 视为一个值,因此使用 isFinite 进行额外判断。 isFinite 的另一个功能是排除无限数。
!isNaN(parseFloat(Infinity)); // true
!isNaN(parseFloat(Infinity)) && isFinite(Infinity); // false
而且,由于parseFloat的解析是纯字符串解析,没有进行类型转换,所以它不会将null、true、false、''视为值。
!isNaN(parseFloat(null)) && isFinite(null); // false
!isNaN(parseFloat(true)) && isFinite(true); // false
!isNaN(parseFloat(false)) && isFinite(false); // false
!isNaN(parseFloat('')) && isFinite(''); // false
太棒了,太棒了。
七、结论
对这些方法的介绍并不全面,因为我们阐述的主题是“判断一个值是否是数值”。 这些方法任何一种都可以单独拿起,我可以讲一下,有时间我会分享给大家。
至此,这篇关于javascript判断是否为数字的几种形式的文章就介绍到这里了。 更多相关js判断是否为数字内容,请搜索巴蜀科技之家之前的文章或者继续浏览下面的相关文章。 希望大家以后多多支持巴蜀科技之家!
发表评论