业务背景
一直以来对Number的最大最小值都没有透彻的理解清楚,在开发过程中也从来没有遇到过这种极限情况
可是最近在刷红宝书第4版的时候,又遇到这个概念.所以想透彻的搞清楚一下
关于这个概念我的理解
书上的概念
Number
对象是采用64位存储的,即8个字节 * 8位 = 64位- 操作符在操作Number类型时,实际是操作的32位(位运算那一节介绍的)
- 在底层再把32位转换成64位进行处理
我的结论
- 最大的整数就是2的32次方减1
- 即
2 ** 32 - 1
- 书上在介绍数组索引时也能佐证,因为数组的索引是整数,最大的索引就是
2 ** 32 - 1
即4294967295
我的疑问
可是在开发过程中经常会遇到这样一个问题,JAVA
侧返回的订单编号或用户ID都整型,在Web
侧会出现后面2位超出JavaScript
整数取值范围
如下:
java = 123456789012345678; // 一共18个数
js = 123456789012345600; // 一共16个数外加2个0
在新的ECMAScript
规范中也添加了1个Number常量最大安全整数Number.MAX_SAFE_INTEGER
- 这个里面的最大整数和上面的一样,是16个数
- 即2的53次方-1
2 ** 53 - 1
问题
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…