javascript 数字判断-JavaScript判断是否是几种形式的数字的汇总(推荐!)

有时需要根据输入的内容进行估算。 这时需要判断输入的内容是否为数字。 下面文章主要介绍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

判断数字位数的函数_javascript 数字判断_判断数字中是否包含某几个数字

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,不是数字

判断数字位数的函数_判断数字中是否包含某几个数字_javascript 数字判断

解析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

判断数字中是否包含某几个数字_javascript 数字判断_判断数字位数的函数

这两个方法与相应的全局方法不同。

不同的是,全局方法会有强制类型转换,而这两个方法没有强制类型转换:

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 相当于:

判断数字位数的函数_判断数字中是否包含某几个数字_javascript 数字判断

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);

判断数字中是否包含某几个数字_javascript 数字判断_判断数字位数的函数

这显然就是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判断是否为数字内容,请搜索巴蜀科技之家之前的文章或者继续浏览下面的相关文章。 希望大家以后多多支持巴蜀科技之家!