数字类型
在现代 JavaScript 中,数字(number)有两种类型:
- JavaScript 中的常规数字以 64 位的格式 IEEE-754 存储,也被称为“双精度浮点数”。这是我们大多数时候所使用的数字,我们将在本章中学习它们。
- BigInt 用于表示任意长度的整数。有时会需要它们,因为正如我们在前面的章节 数据类型 中提到的,常规整数不能安全地超过
(253-1)或小于-(253-1)。由于仅在少数特殊领域才会用到 BigInt,因此我们在特殊的章节 BigInt 中对其进行了介绍。
可以使用下划线 _ 作为分隔符:
let billion = 1_000_000_000;
可以通过在数字后面附加字母 "e" 并指定零的个数来缩短数字:
let billion = 1e9; // 10 亿,字面意思:数字 1 后面跟 9 个 0
alert( 7.3e9 ); // 73 亿(与 7300000000 和 7_300_000_000 相同)
十六进制前缀0x,二进制0b和八进制数字前缀0o
toString(base)
方法 num.toString(base) 返回在给定 base 进制数字系统中 num 的字符串表示形式。
举个例子:
let num = 255;
alert( num.toString(16) ); // ff
alert( num.toString(2) ); // 11111111
base 的范围可以从 2 到 36。默认情况下是 10。
舍入
舍入(rounding)是使用数字时最常用的操作之一。
这里有几个对数字进行舍入的内建函数:
-
Math.floor向下舍入:
3.1变成3,-1.1变成-2。 -
Math.ceil向上舍入:
3.1变成4,-1.1变成-1。 -
Math.round向最近的整数舍入:
3.1变成3,3.6变成4,中间值3.5变成4。 -
Math.trunc(IE 浏览器不支持这个方法)移除小数点后的所有内容而没有舍入:
3.1变成3,-1.1变成-1。
这个是总结它们之间差异的表格:
Math.floor | Math.ceil | Math.round | Math.trunc | |
|---|---|---|---|---|
3.1 | 3 | 4 | 3 | 3 |
3.6 | 3 | 4 | 4 | 3 |
-1.1 | -2 | -1 | -1 | -1 |
-1.6 | -2 | -1 | -2 | -1 |
不精确的计算
在内部,数字是以 64 位格式 IEEE-754 表示的,所以正好有 64 位可以存储一个数字:其中 52 位被用于存储这些数字,其中 11 位用于存储小数点的位置,而 1 位用于符号。
如果一个数字真的很大,则可能会溢出 64 位存储,变成一个特殊的数值 Infinity:
测试:isFinite 和 isNaN
还记得这两个特殊的数值吗?
Infinity(和-Infinity)是一个特殊的数值,比任何数值都大(小)。NaN代表一个 error。
它们属于 number 类型,但不是“普通”数字
用Object.is 进行比较
isNaN(value)将其参数转换为数字,然后检测它是否为NaNisFinite(value)将其参数转换为数字,如果它是常规数字,则返回true,而不是NaN/Infinity/-Infinity
其他数学函数
-
Math.random() -
返回一个从 0 到 1 的随机数(不包括 1)。
alert( Math.random() ); // 0.1234567894322 alert( Math.random() ); // 0.5435252343232 alert( Math.random() ); // ... (任何随机数) -
Math.max(a, b, c...)和Math.min(a, b, c...)从任意数量的参数中返回最大值和最小值。
alert( Math.max(3, 5, -10, 0, 1) ); // 5 alert( Math.min(1, 2) ); // 1 -
Math.pow(n, power)返回
n的给定(power)次幂。alert( Math.pow(2, 10) ); // 2 的 10 次幂 = 1024
Math 对象中还有更多函数和常量,包括三角函数