这是我参与「掘金日新计划 · 8 月更文挑战」的第14天,点击查看活动详情
在现代 JavaScript 中,数字(number)有两种类型:
- JavaScript 中的常规数字以 64 位的格式 IEEE-754 存储,也被称为“双精度浮点数”。这是我们大多数时候所使用的数字,我们将在本章中学习它们。
- BigInt 用于表示任意长度的整数。有时会需要它们,因为正如我们在前面的章节 数据类型 中提到的,常规整数不能安全地超过
(253-1)或小于-(253-1)。由于仅在少数特殊领域才会用到 BigInt,因此我们在特殊的章节 BigInt 中对其进行了介绍。
所以,在这里我们将讨论常规数字类型。现在让我们开始学习吧。
编写数字的更多方法
假如我们需要表示 10 亿。显然,我们可以这样写:
let billion = 1000000000;
我们也可以使用下划线 _ 作为分隔符:
let billion = 1_000_000_000;
这里的下划线 _ 扮演了“语法糖”的角色,使得数字具有更强的可读性。JavaScript 引擎会直接忽略数字之间的 _,所以 上面两个例子其实是一样的。
但在现实生活中,我们通常会尽量避免写带一长串零的数。因为我们比较懒……我们会尝试将 10 亿写成 "1bn",或将 73 亿写成 "7.3bn"。对于大多数大的数字来说都是如此。
在 JavaScript 中,我们可以通过在数字后面附加字母 "e" 并指定零的个数来缩短数字:
let billion = 1e9; // 10 亿,字面意思:数字 1 后面跟 9 个 0
alert( 7.3e9 ); // 73 亿(与 7300000000 和 7_300_000_000 相同)
换句话说,e 把数字乘以 1 后面跟着给定数量的 0 的数字。
1e3 === 1 * 1000; // e3 表示 *1000
1.23e6 === 1.23 * 1000000; // e6 表示 *1000000
现在让我们写一些非常小的数字。例如,1 微秒(百万分之一秒):
let mcs = 0.000001;
就像以前一样,可以使用 "e" 来完成。如果我们想避免显式地写零,我们可以这样写:
let mcs = 1e-6; // 1 的左边有 6 个 0
如果我们数一下 0.000001 中的 0 的个数,是 6 个。所以自然是 1e-6。
换句话说,e 后面的负数表示除以 1 后面跟着给定数量的 0 的数字:
// -3 除以 1 后面跟着 3 个 0 的数字
1e-3 === 1 / 1000; // 0.001
// -6 除以 1 后面跟着 6 个 0 的数字
1.23e-6 === 1.23 / 1000000; // 0.00000123
// 一个更大一点的数字的示例
1234e-2 === 1234 / 100; // 12.34,小数点移动两次
十六进制,二进制和八进制数字
十六进制 数字在 JavaScript 中被广泛用于表示颜色,编码字符以及其他许多东西。所以自然地,有一种较短的写方法:0x,然后是数字。
例如:
alert( 0xff ); // 255
alert( 0xFF ); // 255(一样,大小写没影响)
二进制和八进制数字系统很少使用,但也支持使用 0b 和 0o 前缀:
let a = 0b11111111; // 二进制形式的 255
let b = 0o377; // 八进制形式的 255
alert( a == b ); // true,两边是相同的数字,都是 255
只有这三种进制支持这种写法。对于其他进制,我们应该使用函数 parseInt(我们将在本章后面看到)。
toString(base)
方法 num.toString(base) 返回在给定 base 进制数字系统中 num 的字符串表示形式。
举个例子:
let num = 255;
alert( num.toString(16) ); // ff
alert( num.toString(2) ); // 11111111
base 的范围可以从 2 到 36。默认情况下是 10。
常见的用例如下: