JavaScript 数字
与某些编程语言不同,JavaScript 不区分整数和浮点数,所有数字都采用 IEEE 754 标准的双精度浮点数 表示:
- 每个数字占用
64
位内存空间。 - 可以表示极大或极小的数值,范围约为
±10^-308
到±10^308
。 - 但也存在精度限制,只能精确表示
±(2^53 - 1)
范围内的整数。超过这个范围的整数运算可能会出现精度丢失。
let integer = 42; // 整数
let float = 3.14159; // 浮点数
特殊的数字值:Infinity 和 NaN
除了常规的数值,JavaScript 还提供了三个特殊的数字值:
Infinity
(正无穷): 表示大于任何有限数字的值,例如1 / 0
的结果。-Infinity
(负无穷): 表示小于任何有限数字的值,例如-1 / 0
的结果。NaN
(非数字): 表示无效的数学运算结果,例如0 / 0
或parseInt("hello")
。
console.log(1 / 0); // Infinity
console.log(-1 / 0); // -Infinity
console.log(0 / 0); // NaN
console.log(parseInt("abc")); // NaN
BigInt:驾驭超大整数
为了处理超出 Number
类型表示范围的整数,ES2020 引入了 BigInt
类型。BigInt
可以表示任意大小的整数,不会出现精度丢失的问题。
let hugeNumber = 1234567890123456789012345678901234567890n; // 末尾的 "n" 表示 BigInt
需要注意的是,BigInt
和 Number
是两种不同的类型,不能直接进行混合运算。
BigInt的表示范围在理论上是没有上限的,因为它不是基于固定的位数来表示整数,而是可以动态地根据需要分配内存。在实际应用中,BigInt能够表示的数字大小,受到计算机物理内存(RAM)的限制。
数字进制
除了常见的十进制,JavaScript 还支持二进制、八进制和十六进制表示数字:
- 二进制: 以
0b
或0B
开头,例如0b1010
表示十进制的 10。 - 八进制: 以
0o
或0O
开头 (ES6),例如0o12
表示十进制的 10。 - 十六进制: 以
0x
或0X
开头,例如0xA
表示十进制的 10。
let decimal = 10; // 十进制
let binary = 0b1010; // 二进制
let octal = 0o12; // 八进制
let hexadecimal = 0xA; // 十六进制
Number 对象
JavaScript 提供了内置的 Number
对象,包含一些用于操作数字的属性和方法。
常用属性
属性 | 描述 |
---|---|
Number.MAX_VALUE | 表示JavaScript中可以表示的最大数值。 |
Number.MIN_VALUE | 表示JavaScript中可以表示的最小数值。 |
Number.NaN | 表示“不是一个数字”的特殊值。 |
Number.NEGATIVE_INFINITY | 表示负无穷大,当数值溢出时会返回这个值。 |
Number.POSITIVE_INFINITY | 表示正无穷大,当数值超出最大值时会返回这个值。 |
Number.EPSILON | 表示1与大于1的最接近的、能被JavaScript安全表示的数之间的差值。 |
Number.MIN_SAFE_INTEGER | 表示JavaScript中可以安全表示的最小整数。 |
Number.MAX_SAFE_INTEGER | 表示JavaScript中可以安全表示的最大整数。 |
常用方法
下面是 Number
对象提供的一些方法,可以帮助我们进行数字的解析和验证:
方法 | 描述 |
---|---|
Number.parseFloat() | 将一个字符串参数解析成一个浮点数,与全局的parseFloat() 函数功能相同。 |
Number.parseInt() | 将一个字符串解析成一个指定基数的整数,与全局的parseInt() 函数功能相同。 |
Number.isFinite() | 判断传递的值是否是一个有限数字。 |
Number.isInteger() | 判断传递的值是否是一个整数。 |
Number.isNaN() | 判断传递的值是否是NaN 。这是一个比全局isNaN() 更稳健的版本。 |
Number.isSafeInteger() | 判断传递的值是否是一个安全整数,即在MIN_SAFE_INTEGER 和MAX_SAFE_INTEGER 范围内的整数。 |