Number用于表示整数和浮点数,数字是 Number实例化的对象,可以使用对象提供的丰富方法。

声明定义

使用对象方式定义

  1. let foo = new Number(3);
  2. console.log(foo); // 3

字面量方式定义

最基本的数值字面量格式是十进制整数,直接写出来即可,整数也可以用八进制(以8为基数)或十六进制(以16为基数)字面量表示。对于八进制字面量,第一个数字必须是零(0),然后是相应的八进制数字(数值0~7)。如果字面量中包含的数字超出了应有的范围,就会忽略前缀的零,后面的数字序列会被当成十进制数。

  1. let num1 = 10; // 十进制 10
  2. let num2 = 012; // 八进制 10
  3. let num3 = 0x0a;// 十六进制 10

值的范围

Number.MAX_VALUE保存最大值其值为1.7976931348623157e+308
Number.MIN_VALUE保存最小值其中为5e-324

Infinity 值

Infinity 代表数学概念中的 无穷大 ∞。是一个比任何数字都大的特殊值。

  1. console.log(1/0); // infinity

NaN 值

表示无效的数值。
注意:

  • NaN不能使用==比较,使用以下代码来判断结果是否正确。
  • 可以使用Object.is方法判断两个值是否完全相同。 ```javascript let bar = 2/‘hello’; console.log(bar); // NaN

if (Number.isNaN(bar)) { console.log(‘true’); } // true

console.log(Object.is(bar,NaN)); // true

  1. <a name="Ontv0"></a>
  2. ### 类型转换
  3. ```javascript
  4. console.log(Number('Hello World!')); //NaN
  5. console.log(Number(true)); //1
  6. console.log(Number(false)); //0
  7. console.log(Number('9')); //9
  8. console.log(Number([])); //0
  9. console.log(Number([5])); //5
  10. console.log(Number([5, 2])); //NaN
  11. console.log(Number({})); //NaN

常用方法

parseInt

将字符串中的数字转为整数,且字符串中的忽略空白。第一个参数是要转换的值,第二个值为以什么进制进行转换。

parseFloat

将字符串中的数字转为浮点数,且字符串中的忽略空白。

  1. let foo = '123.1 World';
  2. console.log(parseInt(foo)); // 123
  3. console.log(parseFloat(foo)); // 123.1
  4. console.log(parseInt('100',2)); // 二进制的4

toFixed

使用 toFixed 可对数值舍入操作,参数指定保存的小数位。

  1. console.log(123.5678.toFixed(2)); // 123.57

浮点数精度问题

浮点数可以科学记数法表示,一个应该乘以10的给定次幂的数值。ECMAScript中科学记数法的格式要求是一个数值(整数或浮点数)后跟一个大写或小写的字母e,再加上一个要乘的10的多少次幂。
浮点值的精确度最高可达17位小数,但在算术计算中远不如整数精确。例如,0.1加0.2得到的不是0.3,而是0.30000000000000004。

  1. console.log(0.1+0.2); // 0.30000000000000004

解决方法:
使用 JS 数学库 decimal.js

  1. <script src="https://cdn.bootcss.com/decimal.js/10.2.0/decimal.min.js"></script>
  2. <script>
  3. console.log(Decimal.add(0.1, 0.2));
  4. </script>

注意:
之所以存在这种舍入错误,是因为使用了IEEE 754数值,这种错误并非ECMAScript所独有。其他使用相同格式的语言也有这个问题(C、Java、Rust、Python…)。