在 JavaScript 中,整形 (integer) 和浮点型 (float-point) 数值都是 number
数据类型表示。
var num = 0;
typeof num; // "number"
num = 3.14;
typeof num; // "number"
取值范围
number
数据类型采用的是 双精度 64 位浮点格式 (IEEE754)。
- 整形:-(253 -1) (Number.MIN_SAFE_INTEGER) ~ 253 -1 (Number.MAX_SAFE_INTEGER)
- 浮点型: 5e-324 (Number.MIN_VALUE) ~ 1.7976931348623157e+308 (Number.MAX_VALUE)
表示形式
多数情况下,我们的数字都是以十进制的形式表示的,但是,在 JavaScript 中,我们还可以以八进制和十六进制的形式表示数字。
- 八进制:以 0 开始的数字,
var num = 0377; // 255
- 十六进制:以 0x (0X) 开始的数字,
var num = 0xff; // 255
- 指数字面量:e 或 E,比如:
2e3
,2e-3
两种特殊的数字类型
Infinity
Infinity 的意思即无穷,也就是说一个数字的值太大了,以至于 JavaScript 都已经没法处理它了。所以如果数字的范围超过了上面浮点类型表示的最大范围则变为 Infinity
。
注意事项:
- Infinty 与 Infinity 之间执行减、除结果为 NaN,加、乘结果为 Infinity。
- Infinty 与除 Infinity 和 NaN 之外的数字操作结果都为 Infinity。
判断方式:Number.isFinite(value)
NaN
NaN 即 "Not A Number" 的缩写,也就是非数字,虽然名字叫非数字,但它本质上却是数字类型:typeof NaN; // "number"
。如果您的数字相关操作失败了,都会得到一个 NaN
,比如 1 * 'f'
,Math.sqrt(-1)
,等等。同时,NaN 具有传染性,也就是它与任何数据操作的结果都是一个 NaN
。
判断方式:Number.isNaN(value)
Number 对象
Number
对象在 JavaScript 中并不是一个基元数字数据类型:
var numObj = new Number(1);
typeof numObj; // "object"
numbObj.valueOf(); // 1
因此,在 JavaScript 中避免使用 Number
对象来表示数字,这给判断数据是否为数字类型带来了困难,其次,要想获取它的值,还需要调用 valueOf
方法,存在诸多不便。
但是我想调用 Number
类型的方法怎么办呢,不用担心,JavaScript 会自动对基元数字类型进行装箱操作,在背后将其转换为 Number
类型:
var num = 3;
num.toString(); // "3"
Number 构造函数属性
属性 | 描述 |
---|---|
Number.MAX_VALUE | 一个包含最大允许数字的常量属性(不可更改)。 >>> Number.MAX_VALUE 1.7976931348623157e+308 >>> Number.MAX_VALUE = 101; Number.MAX_VALUE is read-only |
Number.MIN_VALUE | 您能使用的最小的数字,同上,也无法更改。 >>> Number.MIN_VALUE 5e-324 |
Number.NaN | 包含了 NaN 数字。>>> Number.NaN NaN NaN 与任何数据都不相等,包括其自身。>>> Number.NaN === NaN false Number.NaN 相对于更方便使用的 NaN 更加可靠,因为后者存在被重写的风险。>>> NaN = 1; // 不要这么做! 1 >>> NaN 1 >>> Number.NaN NaN |
Number.POSITIVE_INFINITY | 包含了 Infinity 数字。它比全局的 Infinity 值更可靠(global 对象的属性),因为它是只读的。 |
Number.NEGATIVE_INFINITY | 包含了 -Infinity 数字。其余同上。 |
Number 对象方法
方法 | 描述 |
---|---|
toFixed(fractionDigits) | 将一个数字对象定点表示为一个字符串。剩余的数字四舍五入。 >>> var n = new Number(Math.PI); >>> n.valueOf(); 3.141592653589793 >>> n.toFixed(3) "3.142" |
toExponential(fractionDigits) | 将一个数字对象以指数记号法的形式表示为一个字符串。剩余的数字四舍五入。 >>> var n = new Number(56789); >>> n.toExponential(2) "5.68e+4" |
toPrecision(precision) | 一个数字对象的字符串表示形式,指数或定点表示形式,这取决于数字对象本身。 >>> var n = new Number(56789); >>> n.toPrecision(2) "5.7e+4" >>> n.toPrecision(5) "56789" >>> n.toPrecision(4) "5.679e+4" >>> var n = new Number(Math.PI); >>> n.toPrecision(4) "3.142" |