JavaScript(四)Number类型(1)

1.整数和浮点数
JavaScript内部,所有数字都是以64位浮点数形式储存的,整数也是如此。JavaScript 语言的底层根本没有整数,所有数字都是小数(64位浮点数)

2.数值精度
根据国际标准 IEEE 754,JavaScript浮点数的64个二进制位,从最左边开始,是这样组成的

第1位:符号位,0表示正数,1表示负数
第2位到第12位(共11位):指数部分
第13位到第64位(共52位):小数部分(即有效数字)

符号位决定了一个数的正负,指数部分决定了数值的大小,小数部分决定了数值的精度。
指数部分一共有11个二进制位,因此大小范围就是0到2047。
JavaScript 提供的有效数字最长为53个二进制位。
指数部分在0到2047之间,一个数在 JavaScript 内部实际的表示形式:

(-1)^符号位 * 1.xx…xx * 2^指数部分

精度最多只能到53个二进制位,这意味着,绝对值小于2的53次方的整数,即-253到253,都可以精确表示。

Math.pow(2, 53)
// 9007199254740992

Math.pow(2, 53) + 1
// 9007199254740992

Math.pow(2, 53) + 2
// 9007199254740994

Math.pow(2, 53) + 3
// 9007199254740996

Math.pow(2, 53) + 4
// 9007199254740996

3.数值范围

64位浮点数的指数部分的值最大为2047,分出一半表示负数,则 JavaScript 能够表示的数值范围为21024到2-1023(开区间),超出这个范围的数无法表示。
如果一个数大于等于2的1024次方,那么就会发生“正向溢出”,返回Infinity。

Math.pow(2, 1024) // Infinity

如果一个数小于等于2的-1075次方(指数部分最小值-1023,再加上小数部分的52位),那么就会发生为“负向溢出”,直接返回0
Number.MAX_VALUE返回可以表示的具体的最大值。
Number.MIN_VALUE返回可以表示的具体的最小值。

Number.MAX_VALUE // 1.7976931348623157e+308
Number.MIN_VALUE // 5e-324

4.数值的表示法
字面形式和科学计数法表示
以下两种情况,JavaScript 会自动将数值转为科学计数法表示,其他情况都采用字面形式直接表示:
(1)小数点前的数字多于21位。

1234567890123456789012
// 1.2345678901234568e+21

123456789012345678901
// 123456789012345680000

(2)小数点后的零多于5个。

// 小数点后紧跟5个以上的零,
// 就自动转为科学计数法
0.0000003 // 3e-7

// 否则,就保持原来的字面形式
0.000003 // 0.000003

5.数值的进制
Number类型使用了IEEE754 格式来表示整数和浮点数值(浮点数值在某些语言中也被称为双精度数值)。
数值字面量格式:十进制整数、八进制、十六进制、二进制

十进制:没有前导0的数值。
八进制:有前缀0o或0O的数值,或者有前导0、且只用到0-7的八个阿拉伯数字的数值。
十六进制:有前缀0x或0X的数值。
二进制:有前缀0b或0B的数值。

默认情况下,JavaScript 内部会自动将八进制、十六进制、二进制转为十进制。例如:

0xff // 255
0o377 // 255
0b11 // 3

有前导0的数值会被视为八进制,但是如果前导0后面有数字8和9,则该数值被视为十进制。例如:

0888 // 888
0777 // 511

6.正零和负零
JavaScript实际上存在2个零:一个是+0,一个是-0。它们是等价的
唯一有区别的场所是,+0和-0当做分母,返回的值是不相等的

(1 / +0) === (1 / -0) // false

除以正零得到+Infinity,除以负零得到-Infinity。

7.NaN
即非数值(Not a Number)。主要出现在将字符串解析成数字出错的场合
一些数学函数的运算结果会出现NaN:

Math.acos(2) // NaN
Math.log(-1) // NaN
Math.sqrt(-1) // NaN

0除以0也会得到NaN。
NaN本身有两个特点:

任何涉及 NaN 的操作(例如 NaN/10)都会返回 NaN
NaN 与任何值都不相等,包括 NaN 本身。

NaN在布尔运算时被当作false

8.Infinity
Infinity表示“无穷”,用来表示两种场景。一种是一个正的数值太大,或一个负的数值太小,无法表示;另一种是非0数值除以0,得到Infinity
Infinity大于一切数值(除了NaN),-Infinity小于一切数值(除了NaN)。
Infinity与NaN比较,总是返回false。
Infinity的四则运算:

5 * Infinity // Infinity
5 - Infinity // -Infinity
Infinity / 5 // Infinity
5 / Infinity // 0

0乘以Infinity,返回NaN;0除以Infinity,返回0;Infinity除以0,返回Infinity。

0 * Infinity // NaN
0 / Infinity // 0
Infinity / 0 // Infinity

Infinity加上或乘以Infinity,返回的还是Infinity。

Infinity + Infinity // Infinity
Infinity * Infinity // Infinity

Infinity减去或除以Infinity,得到NaN。

Infinity - Infinity // NaN
Infinity / Infinity // NaN

Infinity与null计算时,null会转成0,等同于与0的计算。

null * Infinity // NaN
null / Infinity // 0
Infinity / null // Infinity

Infinity与undefined计算,返回的都是NaN

undefined + Infinity // NaN
undefined - Infinity // NaN
undefined * Infinity // NaN
undefined / Infinity // NaN
Infinity / undefined // NaN
发布了7 篇原创文章 · 获赞 0 · 访问量 53

猜你喜欢

转载自blog.csdn.net/tigerwxm630/article/details/105645934