一、在JavaScript中,Number类型为双精度 IEEE 754 64 位浮点类型。
二、内置的Number对象有一些关于数字的常量属性,如最大值、不是一个数字和无穷大的。你不能改变这些属性,但可以按下边的方式使用它们

  1. var biggestNum = Number.MAX_VALUE;
  2. var smallestNum = Number.MIN_VALUE;
  3. var infiniteNum = Number.POSITIVE_INFINITY;
  4. var negInfiniteNum = Number.NEGATIVE_INFINITY;
  5. var notANum = Number.NaN;

数字的属性

属性 描述
Number.MAX_VALUE 可表示的最大值
Number.MIN_VALUE 可表示的最小值
Number.NaN 特指”非数字“
Number.NEGATIVE_INFINITY 特指“负无穷”;在溢出时返回
Number.POSITIVE_INFINITY 特指“正无穷”;在溢出时返回
Number.EPSILON 表示1和比最接近1且大于1的最小Number之间的差别
Number.MIN_SAFE_INTEGER JavaScript最小安全整数.
Number.MAX_SAFE_INTEGER JavaScript最大安全整数.

Number.MAX_VALUE、Number.MIN_VALUE

一、JavaScript中最大的浮点数是Number.MAX_VALUE,最小的浮点数是Number.MIN_VALUE

Number.EPSILON

一、Number.EPSILON属性表示1与Number可表示的大于1的最小的浮点数之间的差值。
二、EPSILON 属性的值接近于 2.2204460492503130808472633361816E-16,或者 2^-52。

| 【示例】测试是否相等```javascript x = 0.2 y = 0.3 z = 0.1 0.1 + 0.2 == 0.3 // false equal = (Math.abs(x - y + z) < Number.EPSILON) // true

 |
| --- |


<a name="xlGd3"></a>
# 数字的方法
| 方法 | 描述 |
| --- | --- |
| Number.parseFloat() | 把字符串参数解析成浮点数,和全局方法parseFloat() 作用一致. |
| Number.parseInt() | 把字符串解析成特定基数对应的整型数字,和全局方法 parseInt() 作用一致. |
| Number.isFinite() | 判断传递的值是否为有限数字。 |
| Number.isInteger() | 判断传递的值是否为整数。 |
| Number.isNaN() | 判断传递的值是否为 NaN |
| [Number.isSafeInteger()](https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Number/isSafeInteger) | 判断传递的值是否为安全整数 |

<a name="SotT0"></a>
## parseInt 和 parseFloat
一、ES6 将全局方法parseInt()和parseFloat(),移植到 Number 对象上面,行为完全保持不变。<br />二、在现实生活中,我们经常会有带有单位的值,例如 CSS 中的"100px"或"12pt"。并且,在很多国家,货币符号是紧随金额之后的,所以我们有"19€",并希望从中提取出一个数值。<br />1、这就是parseInt和parseFloat的作用。<br />2、它们可以从字符串中“读取”数字,直到无法读取为止。如果发生 error,则返回收集到的数字。
<a name="uhUJG"></a>
### parseInt(str, radix) 
[parseInt](https://www.yuque.com/webfront/js/wc02bt?view=doc_embed)
<a name="co12k"></a>
### parseFloat
一、parseFloat返回一个浮点数:
```javascript
alert( parseFloat('12.5em') ); // 12.5
alert( parseFloat('12.3.4') ); // 12.3,在第二个点出停止了读取

二、某些情况下,parseInt/parseFloat会返回NaN。当没有数字可读时会发生这种情况:

alert( parseInt('a123') ); // NaN,第一个符号停止了读取
alert( parseInt('') ); // NaN

isFinite 和 isNaN

一、两个特殊的数值

  • Infinity(和-Infinity):是一个特殊的数值,比任何数值都大(小)。
  • NaN:代表一个 error。

1、它们属于number类型,但不是“普通”数字,因此,这里有用于检查它们的特殊函数:

  • isFinite(value)
  • isNaN(value)

三、这是es6中Number数字类型新增的方法,与传统的全局方法isFinite()和isNaN()的区别在于:
1、传统方法先调用Number()将非数值的值转为数值,再进行判断
2、而这两个新方法只对数值有效,非数值一律返回false

isFinite(value)

一、isFinite(value)将其参数转换为数字,如果是常规数字,则返回true,而不是NaN/Infinity/-Infinity:

alert( isFinite("15") ); // true
alert( isFinite("str") ); // false,因为是一个特殊的值:NaN
alert( isFinite(Infinity) ); // false,因为是一个特殊的值:Infinity
alert( isFinite(-Infinity) ); // false

二、有时isFinite被用于验证字符串值是否为常规数字:

let num = +prompt("Enter a number", '');

// 结果会是 true,除非你输入的是 Infinity、-Infinity 或不是数字
alert( isFinite(num) );

三、在所有数字函数中,包括isFinite,空字符串或仅有空格的字符串均被视为0。

isNaN(value)

Number.isNaN()

Number.isInteger()

一、ES6的Number.isInteger()方法用来表示给定的参数是否为整数。

  • integer/ˈɪntɪdʒə(r)/ | 【示例】如何检测一个值是否是整数
    1、ES6:Number.isInteger()```javascript Number.isInteger(1.000); //true Number.isInteger(1); //true Number.isInteger(‘1’); //false
    2、ES5,写个pollyfill```javascript
    if(!Number.isInterger){
      Number.isInterger = function(num){
          return (typeof num === 'number') && num%1 === 0;
      }
    }
    
    | | —- |

数字类型原型上的方法

方法 描述 示例
Number.prototype.toExponential() 返回一个数字的指数形式的字符串 var a = 123,
b = a.toExponential(); // 1.23e+2
Number.prototype.toFixed() 返回指定小数位数的表示形式 var a=123,
b = a.toFixed(2); // b=”123.00”
Number.prototype.toPrecision() 返回一个指定精度的数字 var a=123, // 3会由于精度限制消失
b=a.toPrecision(2); // b=”1.2e+2”