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

一、typeof、instanceof、Number.isInteger

  • typeof
    typeof判断值是不是基本类型number
const num = 1;
typeof num === 'number'; // true
  • instanceof
    instanceof判断值是不是包装类Number
const num = new Number(1);
num instanceof Number; // true
  • Number.isInteger
    Number.isInteger判断值是否是整数
Number.isInteger(1);   // true
Number.isInteger('1'); // false
Number.isInteger(1.1); // false

这几种方式的缺点,都是只能基于类型判断,无法判断字符串是否是数值。

二、parseInt、parseFloat

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

const a = '123abc';
parseFloat(a); // 123
const b = 'a123abc';
parseFloat(b); // NaN
const c = '0123abc';
parseFloat(c); // 123
const d = 'a0123abc';
parseFloat(d); // NaN

三、isNaN、isFinite

  • NaN,它表示Not-a-Number。两个NaN无法直接比较相等,因为我们只知道它不是数值,是啥不确定,也就无法比较相等。
  • isNaN(value),如果Number(value)的结果为NaN返回true,否则返回false
  • isFinite(value),如果Number(value)的结果为数值,且不等于Infinity-Infinity返回true,否则返回false
Number(true); // 1
Number(false); // 0
Number(null); // 0
Number(undefined); // NaN
Number(''); // 0
Number('123'); // 123
Number(123); // 123
Number('abc'); // NaN

isNaN(true); // false
isNaN(false); // false
isNaN(null); // false
isNaN(undefined); // true
isNaN(''); // false
isNaN('123'); // false
isNaN(123); // false
isNaN('abc'); // true

isFinite(true); // true
isFinite(false); // true
isFinite(null); // true
isFinite(undefined); // false
isFinite(''); // true
isFinite('123'); // true
isFinite(123); // true
isFinite('abc'); // false

四、Number.isNaN、Number.isFinite

  • Number.isNaN(value),如果valueNaN返回true,否则返回false
  • Number.isFinite(value),如果value为数值,且不等于Infinity-Infinity返回true,否则返回false
  • 和全局函数isNaN()相比,Number.isNaN() 不会自行将参数转换成数字,只有在参数是值为 NaN 的数字时,才会返回 true
Number.isNaN(NaN);        // true
Number.isNaN(Number.NaN); // true
Number.isNaN(0 / 0)       // true
Number.isNaN(true); // false
Number.isNaN(false); // false
Number.isNaN(null); // false
Number.isNaN(undefined); // false
Number.isNaN(''); // false
Number.isNaN('123'); // false
Number.isNaN(123); // false
Number.isNaN('abc'); // false

Number.isFinite(true); // false
Number.isFinite(false); // false
Number.isFinite(null); // false
Number.isFinite(undefined); // false
Number.isFinite(''); // false
Number.isFinite('123'); // false
Number.isFinite(123); // true
Number.isFinite('abc'); // false
  • 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);
}

五、正则表达式

const exp = /^[0-9]+.?[0-9]*/;
exp.test('123');   // true
exp.test('a123'); // false
exp.test(123); // true

参考

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值