打赏

关于JavaScript中Number整数最大长度的一个疑问

业务背景

一直以来对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

 

 

IEEE 754标准

 
posted @ 2021-03-11 09:09  刘奇云  阅读(3204)  评论(0编辑  收藏  举报