JavaScript 判断是否为数字的几种方式

这篇具有很好参考价值的文章主要介绍了JavaScript 判断是否为数字的几种方式。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

喜欢博主的文章,欢迎关注、点赞👍、收藏⭐️、留言📝支持,谢谢大家


js判断是否为数字的方式很多:
  1. typeofinstanceofNumber.isNumber
  2. parseIntparseFloat
  3. isNaNisFinite
  4. Number.isNaNNumber.isFinite
  5. 正则表达式
  6. 终极方案

我们逐一介绍,希望能帮到大家。

1. typeof、instanceof、Number.isInteger

typeof判断值是不是基本类型number,比如:

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

parseIntparseFloat解析的时候遇到非法字符结束,返回解析到的数值。也就是说只要字符串头部是合法数值,那么就能解析出数值,哪怕整体不是数值。比如123abc,会被解析程123

因此,上面的判断方式还不够严谨,下面的终极方案是比较严谨的方式。

3. isNaN、isFinite

在介绍这两个方法之前,先讲下NaN,它表示Not-a-Number。两个NaN无法直接比较相等,因为我们只知道它不是数值,是啥不确定,也就无法比较相等。

NaN === NaN;         // false
NaN == NaN;          // false
Object.is(NaN, NaN); // false
  • isNaN(value),如果ToNumber(value)的结果为NaN返回true,否则返回false
  • isFinite(value),如果ToNumber(value)的结果为数值,且不等于Infinity-Infinity返回true,否则返回false

isNaNisFinite都会先将传入的值转成数值,再进行判断。ToNumber的规则跟直接使用Number函数一样。一些非数值在类型转换的时候都能转成数值,比如:

Number(true);         // 1
Number(false);        // 0
Number(null);         // 0
Number('');           // 0

nulltruefalse''使用isNaN结果都是false,但是它们本身不是数值,因此不能单独使用isNaN

4. Number.isNaN、Number.isFinite

这两个方法跟对应的全局方法是不一样的。

  • Number.isNaN(value),如果valueNaN返回true,否则返回false
  • Number.isFinite(value),如果value为数值,且不等于Infinity-Infinity返回true,否则返回false

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

Number.isNaN(null);      // true
Number.isNaN(true);      // true
Number.isNaN(false);     // true
Number.isNaN('');        // true

可以看,由于没有类型转换,所以Number.isNaN判断nulltruefalse''的结果都是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为例,我们应该得到false

  1. parseFloat('123abc')得到123
  2. !isNaN(123)得到true
  3. isFinite('123abc')得到false
  4. 最终结果为false

单独使用!isNaN(parseFloat(value))会将123abc当成数值,所以用isFinite额外判断一次,isFinite的另一个作用是排除无穷数。

!isNaN(parseFloat(Infinity));  // true
!isNaN(parseFloat(Infinity)) && isFinite(Infinity); // false

而且,因为parseFloat的解析是纯字符串解析,没有类型转换,所以不会将nulltruefalse''当成数值。

!isNaN(parseFloat(null)) && isFinite(null);   // false
!isNaN(parseFloat(true)) && isFinite(true);   // false
!isNaN(parseFloat(false)) && isFinite(false); // false
!isNaN(parseFloat('')) && isFinite('');       // false

妙,妙不可言。

7. 结语

对这几个方法的介绍并不全面,因为我们探讨的主题是“判断值是否为数值”。这几个方法任何一个单独拎出来,都能讲一篇,有时间再跟大家分享。文章来源地址https://www.toymoban.com/news/detail-409025.html

到了这里,关于JavaScript 判断是否为数字的几种方式的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • JavaScript中 判断网络状态的几种方法

    1. 使用 Navigator onLine 属性 Navigator onLine 属性判断浏览器是否在线,在线返回 true,离线返回 false; Navigator onLine 是只读属性,所有主流浏览器都支持 onLine 属性; 2. 使用 ononline、onoffline 事件 这两个方法属于 “侦听器”,在网络连接 / 断开的瞬间会触发(当网络从离线变为在

    2024年01月24日
    浏览(37)
  • Java判断null的几种方式

    组内code review时,有同学提到字符串判断空值的写法,如下两种, (1)null在后, (2)null在前, 这两种写法,有什么区别? 这两个测试,都可以执行,有种解释是,null放在前面是为了避免少写一个\\\"=\\\",因为\\\"null=\\\"书写会报错,防止笔误写成\\\"=null\\\",不会报错,进而漏掉问题。

    2024年02月13日
    浏览(37)
  • C语言判断一个数是否是质数的几种常用方法(求100-1000以内的所有质数)

    要用代码判断一个数是否是质数,首先我们需要知道什么什么数称之为质数。质数又称素数。一个大于1的自然数,除了1和它自身外,不能被其他自然数整除的数叫做质数;否则称为合数(规定1既不是质数也不是合数)。 以下有三种方法判定质数: 通过从2到n-1每个数均整除

    2024年02月08日
    浏览(64)
  • JavaScript深浅拷贝的几种方式

    深浅拷贝主要是针对于引用类型而言的 1. JSON.parse(JSON.strigify(Str)) JSON.stringify() 该方法用于将一个字转换为JSON字符串,该字符串符合JSON格式,并且可以被JSON.parse()方法还原。 对于原始类型的字符串,转换结果会带双引号 如果要转换的对象的属性是undefined,函数或xml对象,该

    2024年01月19日
    浏览(34)
  • JavaScript打开新窗口的几种方式

    window.location.href window.open 指定参数 NewUrl //’ 弹出窗口的地址; ‘newwindow’ //弹出窗口的名字,非必须,可用空’\\\'代替; height=600 //窗口高度; width=900 //窗口宽度; top=0 //窗口距离屏幕上方的象素值; left=0 //窗口距离屏幕左侧的象素值; toolbar=no //是否显示工具栏,yes为显示

    2024年02月14日
    浏览(29)
  • JavaScript里实现继承的几种方式

    JavaScript 中的继承可以通过以下几种方式来实现: 1、原型链继承 :通过将子类的原型对象指向父类的实例来实现继承。这种方式的优点是实现简单,缺点是父类的私有属性和方法子类是不能访问的。   2、借用构造函数继承 :通过在子类的构造函数中调用父类的构造函数来

    2023年04月23日
    浏览(37)
  • Java中验证日期时间字符串是否合法的几种方式

    第一种,JDK8之前用SimpleDateFormat类 可以使用SimpleDateFormat类来验证日期时间的格式和有效性。 首先,可以创建SimpleDateFormat对象,然后使用该对象的parse()方法来验证日期时间字符串的格式和有效性。如果该方法抛出异常,则表示日期时间字符串不符合指定的格式,而如果该方法

    2024年02月04日
    浏览(40)
  • 控制el-input只输入数字的几种方式

    一、 v-model.number 指令修饰符 使用v-model.number可以将输入的数据转换为Number类型。但是本质上还是String类型 有三个问题: 1.键盘先输入数字时没有问题,数字后面不会有字符 2.如果先输入的是字符再输入数字则是拼接效果,字符不会被排除且可以输入中文,如: ab123 3.以上两

    2024年02月13日
    浏览(36)
  • 【业务功能篇34】Java 字符串数字 左右补全0的几种方式

    业务场景: 我们在做一个单号字段设计的时候,经常需要用到这种格式,比如no2023062800001,no2023062800002,no2023062800003,单号累计递增,前缀是指定的字符串+当前日期+数字五位,不满五位左边补0 %06d的定义: 0代表前面要补的字符 6代表字符串长度 d表示参数为整数类型

    2024年02月13日
    浏览(36)
  • C语言中判断素数的几种方法

    作为C的初学者们希望大家看看这几种判断素数的方法 既然进来了就看完把 题目要求: 判断n是否为素数。 首先我们讲一下素数的判定:素数就是只能被1或者本身整除的数,这就延伸出了几种不同的判定方法。 方法一:因为判断素数相当于就是判断这个数能不能整除2-这个数

    2024年02月11日
    浏览(35)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包