相关推荐recommended
js判断是否为数字的几种方式
作者:mmseoamin日期:2023-11-30

一、typeof、instanceof、Number.isInteger

  • typeof

    js判断是否为数字的几种方式,js判断是否为数字的几种方式,第1张

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

    const num = 1;
    typeof num === 'number'; // true
    
    • instanceof

      js判断是否为数字的几种方式,js判断是否为数字的几种方式,第2张

      instanceof判断值是不是包装类Number:

      const num = new Number(1);
      num instanceof Number; // true
      
      • Number.isInteger

        js判断是否为数字的几种方式,js判断是否为数字的几种方式,第3张

        Number.isInteger判断值是否是整数:

        Number.isInteger(1);   // true
        Number.isInteger('1'); // false
        Number.isInteger(1.1); // false
        

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

        二、parseInt、parseFloat

        parseInt和parseFloat解析的时候遇到非法字符结束,返回解析到的数值。也就是说只要字符串头部是合法数值,那么就能解析出数值,哪怕整体不是数值。比如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),如果value为NaN返回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
                

                参考

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