位置: 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 静态链接)

  • 电子税务局附加税带不出来
  • 出口业务运费可以抵扣吗
  • 财务报表分析五种方法
  • 存款利息收入需要缴纳所得税吗
  • 增值税专用发票和普通发票的区别
  • 公司注销应付款太多
  • 长期股权抵消分录
  • 公司收到股东的投资款以后怎么处理
  • 待处置资产损溢在什么科目
  • 预交电费有发票吗
  • 计提个人生产经营所得个税需要贴附件吗
  • 固定资产怎么进入生产成本
  • 建筑行业挂靠什么意思
  • 现金预算在企业财务管理中是何地位
  • 年初未交增值税借方怎么处理
  • 1697510605
  • 长期待摊费用期末在借方还是贷方
  • 苹果手机id被锁定什么意思
  • 冲红发票的会计处理办法
  • 在建工程预付款可以计入费用么
  • 误解苹果
  • PHP:ignore_user_abort()的用法_misc函数
  • 当月认证抵扣的进项税发票一定要入帐做成本吗?
  • 被辞退有补助金吗
  • 包工队人员受伤该由谁负责
  • 外籍个人取得的现金住房补贴所得免征个人所得税吗
  • php curl_multi_init
  • 总部资产减值测试例题
  • AttributeError: ‘bytes‘ object has no attribute ‘encode‘异常解决方案
  • php文件如何使用
  • php字符串转换
  • 【角色扮演】
  • php红包源码
  • 股权转让 减资
  • 股权转让怎么查
  • 停车场广告收入需要每年缴纳增值税吗?
  • 计提的教育经费可以税前扣除吗
  • 出差飞机票会计分录
  • 购买研发设备的发票可以申报创新券吗?
  • 商业汇票分为哪几种
  • 员工高工资
  • 汇算清缴时资产折旧怎么填
  • 开模具厂一年能挣多少钱
  • 水泥贸易利润
  • 上月暂估的成本这月收到票怎么做
  • 小规模公司销项发票税额记到哪里了
  • 酒店租金计入什么会计科目
  • 企业员工福利费可以做什么
  • 村料采购会计科目有哪些
  • 水费能抵扣进项税吗
  • 公司开业之前产假怎么算
  • 土地发票可以抵扣吗
  • 开具旧税号也能认证成功
  • 现金折扣与商业折扣的计算
  • 滞留专票会有什么风险
  • 电脑开机一直显示windowsxp
  • windows2003企业版sp2密钥
  • Windows Server 2008的NPS策略应用
  • win10出现未知错误
  • 怎么找回手机删除的照片和视频
  • 如何在苹果电脑上下载软件
  • mac键盘怎么开
  • win7系统怎样
  • 苹果电脑Mac系统版本所对应的数字
  • windows10预览
  • window10 不能上网
  • linux系统命令包含在哪个目录中
  • Extjs4 关于Store的一些操作(加载/回调/添加)
  • nodejs怎么在服务器运行
  • javascript教程完整版
  • Git && GitHub 之远程协作
  • digitalocean收费
  • js进行表单验证的目的是什么
  • js设计模式和开发实践
  • 2021一带一路会议时间?
  • 江西省税务总局官网
  • 医保报销是按自然年计算吗
  • 税务上门核查要看什么
  • 专用发票章盖在哪里
  • 矿产资源税税率2020年
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设