位置: IT常识 - 正文

JavaScript数据类型BigInt实践之id数值太大,导致前后端交互异常(javascript数据类型分为哪两类)

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

推荐整理分享JavaScript数据类型BigInt实践之id数值太大,导致前后端交互异常(javascript数据类型分为哪两类),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:javascript数据类型不包括,javascript数据类型不包括,javascript数据类型主要有,javascript数据类型转换,javascript数据类型,javascript数据类型分为哪两类,javascript数据类型分为哪两类,javascript数据类型分为哪两类,内容如对您有帮助,希望把文章链接给更多的朋友!

项目开发中前后端数据交互常会使用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数据中的这类数值

JavaScript数据类型BigInt实践之id数值太大,导致前后端交互异常(javascript数据类型分为哪两类)

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

然后在请求方法文件中importJSONBigInt from'json-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能够对应得上

本文链接地址:https://www.jiuchutong.com/zhishi/303787.html 转载请保留说明!

上一篇:python怎么把数据保存为excel(Python怎么把数据倒着输出)

下一篇:静态链接(linux 静态链接)

  • 车辆购置税的税率是多少
  • 企业对外投资收益税收
  • 其他综合收益税后净额影响净利润吗
  • 转登记小规模纳税人转让固定资产
  • 房产税按租金收入
  • 创业就业带动补贴
  • 清包工简易征收文件
  • 不同项目之间进项税能否抵扣?
  • 农业企业销售林木是否要交印花税?
  • 有税收完税证明还需要发票吗
  • 增值税发票不小心撕坏了怎么办
  • 为员工买的商业险是否能税前扣除
  • 前期差错更正中所得税的会计处理
  • 一般纳税人以清包工方式
  • 小规模开票是含税的吗
  • 增值税在免税范围内,附加税怎么做
  • 营改增后不动产进项税额抵扣
  • 怎样用增值税专票抵扣
  • 现金预算在企业财务管理中是何地位
  • 免税收入包括哪些收入
  • 营改增建筑工程怎么计算举例
  • 登陆对话框不能输入
  • php怎么实现代码运行功能
  • 收到对方公司开出发票如何做账
  • 上市公司发行股票会计分录
  • 一般计税方法增值税
  • 电压是什么量
  • linux 文件修改
  • 出口商品怎么做分录
  • PHP:imageloadfont()的用法_GD库图像处理函数
  • 供热企业有哪些
  • 固定资产盘盈为什么要调整所得税
  • php框架运行机制
  • 小规模城建税减半征收2021新政策
  • vue在项目中怎么用的
  • 什么是免抵调库税额
  • linux清理文件内容
  • 长期应付款的会计编号
  • 建筑企业其他应付款包含什么内容
  • java中日志的作用
  • 印花税补交会怎样
  • 应纳税所得额计入什么科目
  • access speed
  • 购买商品并入库做什么会计分录
  • 小规模纳税人给别人开票的税点多少
  • 在建工程的预付款账务处理
  • 挂靠指的是什么意思?
  • 什么是原始凭证?简述原始凭证审核的内容
  • 电子承兑汇票到期怎么兑现
  • 控制企业的5种方式
  • 结转清理净损失怎么算
  • 财产租赁合同印花税怎么缴纳
  • 生产型企业入库管理办法
  • 参加会议正常应该交多少钱
  • 对公网银回单可以导出吗
  • 什么是摊余成本法
  • mysql基本命令大全
  • win8系统安装office2010
  • win8.0升级win8.1
  • elf.exe是什么程序
  • mac如何快速复制文件
  • 2021年win10累积更新
  • linux如何使用u盘
  • k mean python
  • 网页设计需要多少分辨率
  • js选择框全选
  • python脚本运行命令
  • 不同版本安卓控制台区别
  • js中concat的用法
  • Javascript字符串奇数位替换
  • 陕西省地方税务局关于调整土地增值税预征率的公告
  • 挂车买保险是怎么买的
  • 深圳市国家税务局电子税务局
  • 什么叫关联单位
  • 公共暖气管道维修费用由谁承担
  • 衡水地税局税务电话
  • 财务负责人变更了之后还有影响吗
  • 非盈利org
  • 金水区地税局办事大厅
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设