22. JS Number(数字)对象
1. 前言
在 JavaScript 中您可以使用十进制、十六进制或八进制表示法来表示整数或浮点数。与其它编程语言不同,JavaScript 中的数字并不区分整数和浮点数,统一使用 IEEE754 标准(二进制浮点数算术标准)的 64 位浮点格式表示数字,能表示的最大值(Number.MAX_VALUE)为 ±1.7976931348623157e+308,最小值(Number.MIN_VALUE)为 ±5e-324。示例代码如下:
var x = 123; // 整数 var y = 3.14; // 浮点数 var z = 0xff; // 十六进制数:255
对于比较大的数字可以使用指数表示法来表示,例如 6.02e+23 等于 6.02 x 10²³,示例代码如下:
var x = 1.57e4; // 等于 15700 var y = 4.25e+6; // 等于 4250000 var z = 4.25e-6; // 等于 0.00000425
提示:JavaScript 中能够表示的最大的整数是 2⁵³ - 1,即 9007199254740991,能够表示的最小整数是 -(2⁵³ - 1),即 -9007199254740991。
除了可以使用十进制表示数字外,您也可以使用八进制或十六进制表示法来表示数字,其中八进制表示法使用 0 作为前缀,十六进制表示法使用 0x 作为前缀,示例代码如下:
var a = 0377; // 等于 255 var b = 0123; // 等于 83 var c = 0xff; // 等于 255 var d = 0xb4; // 等于 180
注意:整数可以用十进制、十六进制和八进制表示法表示,浮点数可以用十进制或指数表示法表示。
2. ±Infinity(无穷)
Infinity 是一个特殊的值,表示无穷大。当一个表达式的运算结果超过了 JavaScript 所能表示的数字上限或下限时,JavaScript 就会使用 Infinity 或 -Infinity 表示这个结果,其中 Infinity 表示正无穷大,-Infinity 表示负无穷大。示例代码如下:
var a = 5 / 0; // 等于 Infinity var b = -5 / 0; // 等于 -Infinity
3. NaN(非数字)
NaN 同样是 JavaScript 中的一个特殊值,用来表示某个值不是数字。NaN 不等于(通过 ==、!=、===、!=== 比较)其它任何值(包括另外一个 NaN 值),使用 isNaN() 函数可以判断一个数是否为 NaN。
以下几种操作会返回 NaN:
- 使用函数无法将参数转换为数字时会返回 NaN,例如 parseInt("abc")、new Number("abc");
- 结果不是实数的数学运算,例如 Math.sqrt(-1);
- 任何操作数中包含 NaN 的表达式,例如 5 * NaN;
- 涉及字符串的非加法运算,且字符串无法自动转换为数字,例如 "foo" / 5。
4. Number 对象
Number 对象是原始数值的包装对象,创建 Number 对象的语法格式如下:
var myNum = new Number(value); var myNum = Number(value);
其中 value 为要创建的 Number 对象的数值,若 value 为一个非数字的值,则会尝试将其转换为数字,若转换失败则会返回 NaN。
当 Number() 函数和 new 运算符一起使用时,会创建一个新的 Number 对象。如果不用 new 运算符,把 Number() 当作一个函数来调用,则会将其中的参数转换为一个数值,并且返回这个值(如果转换失败,则返回 NaN)。
示例代码如下:
var a = new Number("123"); var b = Number("456"); var c = 789; var d = new Number("abc"); document.write(typeof a + "<br>"); // 输出:object document.write(typeof b + "<br>"); // 输出:number document.write(typeof c + "<br>"); // 输出:number document.write(d + "<br>"); // 输出:NaN
5. Number 属性
Number 对象中提供了一些属性,如下表所示:
属性 | 描述 |
---|---|
Number.MAX_VALUE | JavaScript 中所能表示的最大值 |
Number.MIN_VALUE | JavaScript 中所能表示的最小值 |
Number.NaN | 非数字 |
Number.NEGATIVE_INFINITY | 负无穷,在溢出时返回 |
Number.POSITIVE_INFINITY | 正无穷,在溢出时返回 |
Number.EPSILON | 表示 1 与 Number 所能表示的大于 1 的最小浮点数之间的差 |
Number.MIN_SAFE_INTEGER | 最小安全整数,即 -9007199254740991 |
Number.MAX_SAFE_INTEGER | 最大安全整数,即 9007199254740991 |
6. Number 方法
除了属性外,Number 对象中还提供了一些方法,如下表所示:
方法 | 描述 |
---|---|
Number.parseFloat() | 将字符串转换成浮点数,和全局方法 parseFloat() 作用相同 |
Number.parseInt() | 将字符串转换成整型数字,和全局方法 parseInt() 作用相同 |
Number.isFinite() | 判断 Number 对象是否为有穷数 |
Number.isInteger() | 判断 Number 对象是否为整数 |
Number.isNaN() | 判断 Number 对象是否为 NaN 类型 |
Number.isSafeInteger() | 判断 Number 对象是否为安全整数,即范围为 -(2⁵³ - 1)到 2⁵³ - 1 之间的整数 |
Number.toString() | 把 Number 对象转换为字符串,使用指定的基数 |
Number.toLocaleString() | 把 Number 对象转换为字符串,使用本地数字格式顺序 |
Number.toFixed() | 把 Number 对象转换为字符串,结果的小数点后有指定位数的数字 |
Number.toExponential() | 把 Number 对象的值转换为指数计数法 |
Number.toPrecision() | 把 Number 对象格式化为指定的长度 |
Number.valueOf() | 返回一个 Number 对象的基本数字值 |