首页IT科技js中id和class(JavaScript数据类型BigInt实践之id数值太大,导致前后端交互异常)

js中id和class(JavaScript数据类型BigInt实践之id数值太大,导致前后端交互异常)

时间2025-06-20 15:55:58分类IT科技浏览4561
导读:项目开发中前后端数据交互常会使用id作为主键索引,通常id数值都不大,使用number类型就可以表示处理,但对于一些分布式id或其他情况,id数值太大且超过了JS的最大处理数(Math.pow(2,53 =9007199254740992 时就会存在精度问题:Math.pow(2, 53 + 1 =90071992547409...

项目开发中前后端数据交互常会使用id作为主键索引             ,通常id数值都不大                     ,使用number类型就可以表示处理      ,但对于一些分布式id或其他情况         ,id数值太大且超过了JS的最大处理数(Math.pow(2,53) =9007199254740992)时就会存在精度问题:Math.pow(2, 53) + 1 =9007199254740992;

实际例子:

当后端返回了这样一个id数值的数据                     ,可以看到此数值已经超过了JS的最大处理数         ,丢失了精度      ,前端此时拿到的id值是错误的                     ,此时涉及id的前后端数据交互            ,前端传输的参数id为1528669910682108000   ,后端无法根据此id找到对应的数据或者找出了其他数据导致异常

可以通过浏览器控制台Network的Preview和Response查看差异             。Response中是原始响应数据                     ,这里的id是正确的为1528669910682107904                   。而Preview中是浏览器接收到Response                ,通过JS转化为JavaScript对象形式,并格式化层级结构                 ,以便查看                    ,此时经过了JS处理   ,id数值精度丢失             ,看到的就是1528669910682108000这个错误id                     ,前端请求后接收到的id也是这个错误id        。

解决办法一:通过后端解决      ,把id转化为字符串类型返回

这样获取到的id就是正确的id了         ,但是后端有数据类型严格定义                     ,不愿意改的话         ,那就靠我们前端来解决(方法二)

解决办法二:JavaScript新增的基础数据类型bigint就可以解决此类问题

将id转化为bigint类型      ,使用到json-bigint插件处理json数据中的这类数值

npm install -S json-bigint 底层依赖于bignumber.js

然后在请求方法文件中importJSONBigInt fromjson-bigint;

在请求函数中添加这一段转化代码                     ,此时可以console.log出接收到的id为

其他地方不需要改动            ,这个时候前后端数据交互时id参数传输的时候会自动转化为字符串类型传输{id: "1528669910682107904"}

但是新问题又来了   ,现在是vue+element-ui项目                     ,table表格绑定row-key="id"                ,此时会报错

解决办法一:写一个全局转化函数

functiontransId(row) { return row.id.toString();}

然后在使用到id的地方调用此函数,转化为字符串类型去处理eg: (:row-key="transId")

解决办法二:在之前import JSONBigInt的地方添加代码:

constJSONBigIntStr = JSONBigInt({ storeAsString: true });

自动将BigNumber转化为字符串类型                 ,然后修改转化代码

这样console.log出id就不为BigNumber类型的了                    ,而是字符串类型   ,且id和后台的id能够对应得上

创心域SEO版权声明:以上内容作者已申请原创保护,未经允许不得转载,侵权必究!授权事宜、对本内容有异议或投诉,敬请联系网站管理员,我们将尽快回复您,谢谢合作!

展开全文READ MORE
steam的hosts(解决 Steam 速度慢打不开? UsbEAm 游戏平台 Hosts 网络错误修复/下载加速工具)