文章目录
轻松掌握 JavaScript 中的 Number 数字对象
今天我们要来深入了解 JavaScript 里的 Number 数字对象。
在 JavaScript 的世界里,数字类型相对比较简单,它只有一种数字类型哦。而且我们书写数字的时候,既可以使用小数点,也可以不使用小数点。
JavaScript 数字的书写方式
在 JavaScript 中,数字的书写很灵活,可以使用小数点,也可以不使用。比如:
var pi = 3.14; // 使用小数点,这是一个小数
var x = 34; // 不使用小数点,这是一个整数
当我们遇到极大或极小的数字时,还可以通过科学(指数)计数法来书写。举个例子:
实例
var y = 123e5; // 这里的 e5 表示乘以 10 的 5 次方,所以 y 的值是 12300000
var z = 123e-5; // e-5 表示乘以 10 的 -5 次方,z 的值是 0.00123
JavaScript 数字的存储方式
JavaScript 和很多其他编程语言不太一样,它不是类型语言,也就是说它不定义像整数、短整数、长整数、浮点数等不同类型的数字。
在 JavaScript 中,所有的数字都是用浮点型来表示的,采用的是 IEEE754 标准定义的 64 位浮点格式。这种格式能表示的最大值是 ±1.7976931348623157 x 10³⁰⁸ ,最小值是 ±5 x 10⁻³²⁴ 。
64 位的分布是这样的:
- 值 (aka Fraction/Mantissa) :占 52 位(0 - 51 位)。
- 指数 :占 11 位(50 - 62 位)。
- Sign(符号位) :占 1 位(63 位)。
JavaScript 数字的精度问题
整数(不使用小数点或指数计数法)在 JavaScript 中最多为 15 位。看下面的例子:
实例
var x = 999999999999999; // x 的值就是 999999999999999
var y = 9999999999999999; // 由于整数最多 15 位,y 的值会变成 10000000000000000
对于小数来说,最大位数是 17 位,不过要注意哦,浮点运算并不总是 100% 准确的。比如:
实例
var x = 0.2 + 0.1; // 按照我们的预期结果应该是 0.3,但实际输出结果为 0.30000000000000004
八进制和十六进制数字
在 JavaScript 里,如果一个数值常量的前缀为 0,那么 JavaScript 会把它解释为八进制数;如果前缀为 0 和 “x”,则会被解释为十六进制数。
实例
var y = 0377; // 这里的 0377 是八进制数,转换为十进制是 255
var z = 0xFF; // 0xFF 是十六进制数,转换为十进制同样是 255
这里要注意哦,除非你需要进行八进制转换,否则绝不要在数字前面写零。
默认情况下,JavaScript 数字是按十进制显示的。但我们可以使用 toString()
方法来将数字输出为 16 进制、8 进制、2 进制。比如:
实例
var myNumber = 128;
myNumber.toString(16); // 这里的参数 16 表示转换为十六进制,返回 80
myNumber.toString(8); // 参数 8 表示转换为八进制,返回 200
myNumber.toString(2); // 参数 2 表示转换为二进制,返回 10000000
无穷大(Infinity)的情况
当数字运算的结果超过了 JavaScript 所能表示的数字上限,也就是发生溢出时,结果就会是一个特殊的无穷大(infinity)值,在 JavaScript 中用 Infinity
表示。同样,当负数的值超过了 JavaScript 所能表示的负数范围,结果就是负无穷大,用 -Infinity
表示。
无穷大值的运算特性和我们想的是一样的,基于它们的加、减、乘和除运算结果还是无穷大(当然要保留它们的正负号)。
实例
myNumber = 2;
while (myNumber != Infinity)
{
myNumber = myNumber * myNumber; // 不断进行乘法运算,直到 myNumber 等于 Infinity
}
另外,除以 0 也会产生无穷大:
实例
var x = 2 / 0; // 结果是 Infinity
var y = -2 / 0; // 结果是 -Infinity
NaN - 非数字值
NaN
属性代表的是一个非数字值的特殊值,它用于指示某个值不是数字。我们可以把 Number
对象设置为这个值,来表明它不是数字值。
我们可以使用 isNaN()
全局函数来判断一个值是否是 NaN
值。
实例
var x = 1000 / "Apple"; // 因为除数是字符串,不是数字,所以结果是 NaN
isNaN(x); // 返回 true,说明 x 是 NaN
var y = 100 / "1000"; // 这里字符串 "1000" 会被转换为数字 1000 进行运算,结果不是 NaN
isNaN(y); // 返回 false
这里要注意,除以 0 得到的无穷大是一个数字,不是 NaN
:
实例
var x = 1000 / 0;
isNaN(x); // 返回 false,说明 x 不是 NaN
数字的两种形式:数字和对象
在 JavaScript 中,数字有两种形式,一种是直接赋值,就像 x = 123;
这样,这时 x
就是一个数字类型。另一种是通过 Number
对象来初始化数据,比如 var y = new Number(123);
,这时 y
就是一个 Number
对象。
实例
var x = 123;
var y = new Number(123);
typeof(x) // 返回 "Number",说明 x 是数字类型
typeof(y) // 返回 "Object",说明 y 是对象类型
而且,虽然 x
和 y
的值都是 123,但它们并不相等:
实例
var x = 123;
var y = new Number(123);
(x === y) // 结果为 false,因为 x 是一个数字,y 是一个对象
数字的属性
Number
对象有一些很有用的属性,比如:
MAX_VALUE
:表示 JavaScript 中能表示的最大数字。MIN_VALUE
:表示 JavaScript 中能表示的最小数字。NEGATIVE_INFINITY
:表示负无穷大。POSITIVE_INFINITY
:表示正无穷大。NaN
:表示非数字值。prototype
:用于实现对象的继承等功能。constructor
:指向创建该对象的函数。
数字的方法
Number
对象也有很多实用的方法,比如:
toExponential()
:把数字转换为指数计数法表示的字符串。toFixed()
:把数字格式化为指定小数位数的字符串。toPrecision()
:把数字格式化为指定精度的字符串。toString()
:把数字转换为字符串,可以指定转换的进制。valueOf()
:返回数字对象的原始值。