Number用于表示整数和浮点数,数字是 Number实例化的对象,可以使用对象提供的丰富方法。
声明定义
使用对象方式定义
let foo = new Number(3);console.log(foo); // 3
字面量方式定义
最基本的数值字面量格式是十进制整数,直接写出来即可,整数也可以用八进制(以8为基数)或十六进制(以16为基数)字面量表示。对于八进制字面量,第一个数字必须是零(0),然后是相应的八进制数字(数值0~7)。如果字面量中包含的数字超出了应有的范围,就会忽略前缀的零,后面的数字序列会被当成十进制数。
let num1 = 10; // 十进制 10let num2 = 012; // 八进制 10let num3 = 0x0a;// 十六进制 10
值的范围
Number.MAX_VALUE保存最大值其值为1.7976931348623157e+308Number.MIN_VALUE保存最小值其中为5e-324
Infinity 值
Infinity 代表数学概念中的 无穷大 ∞。是一个比任何数字都大的特殊值。
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
<a name="Ontv0"></a>### 类型转换```javascriptconsole.log(Number('Hello World!')); //NaNconsole.log(Number(true)); //1console.log(Number(false)); //0console.log(Number('9')); //9console.log(Number([])); //0console.log(Number([5])); //5console.log(Number([5, 2])); //NaNconsole.log(Number({})); //NaN
常用方法
parseInt
将字符串中的数字转为整数,且字符串中的忽略空白。第一个参数是要转换的值,第二个值为以什么进制进行转换。
parseFloat
将字符串中的数字转为浮点数,且字符串中的忽略空白。
let foo = '123.1 World';console.log(parseInt(foo)); // 123console.log(parseFloat(foo)); // 123.1console.log(parseInt('100',2)); // 二进制的4
toFixed
使用 toFixed 可对数值舍入操作,参数指定保存的小数位。
console.log(123.5678.toFixed(2)); // 123.57
浮点数精度问题
浮点数可以科学记数法表示,一个应该乘以10的给定次幂的数值。ECMAScript中科学记数法的格式要求是一个数值(整数或浮点数)后跟一个大写或小写的字母e,再加上一个要乘的10的多少次幂。
浮点值的精确度最高可达17位小数,但在算术计算中远不如整数精确。例如,0.1加0.2得到的不是0.3,而是0.30000000000000004。
console.log(0.1+0.2); // 0.30000000000000004
解决方法:
使用 JS 数学库 decimal.js
<script src="https://cdn.bootcss.com/decimal.js/10.2.0/decimal.min.js"></script><script>console.log(Decimal.add(0.1, 0.2));</script>
注意:
之所以存在这种舍入错误,是因为使用了IEEE 754数值,这种错误并非ECMAScript所独有。其他使用相同格式的语言也有这个问题(C、Java、Rust、Python…)。
