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

  • 朋友圈怎么看别人有没有屏蔽你(朋友圈怎么看别人是否浏览过)

    朋友圈怎么看别人有没有屏蔽你(朋友圈怎么看别人是否浏览过)

  • 屏幕保护的密码是需要分大小写的吗(屏幕保护的密码是需要分大小写的(2分))

    屏幕保护的密码是需要分大小写的吗(屏幕保护的密码是需要分大小写的(2分))

  • 5g应用将会在哪些方面体现(5g在app上的新应用场景)

    5g应用将会在哪些方面体现(5g在app上的新应用场景)

  • 芒果app弹幕哪里开(芒果tvapp弹幕)

    芒果app弹幕哪里开(芒果tvapp弹幕)

  • 异形屏是什么东西(异形屏是什么东西做的)

    异形屏是什么东西(异形屏是什么东西做的)

  • 苹果11 128g够用吗(ipone11 128g够用吗)

    苹果11 128g够用吗(ipone11 128g够用吗)

  • 安卓手机网络连接不可用是怎么回事(安卓手机网络连接失败怎么回事)

    安卓手机网络连接不可用是怎么回事(安卓手机网络连接失败怎么回事)

  • m3u8是啥格式(m3u8是什么格式文件)

    m3u8是啥格式(m3u8是什么格式文件)

  • 硒鼓就是粉盒吗(硒鼓和粉盒不是一个东西吗)

    硒鼓就是粉盒吗(硒鼓和粉盒不是一个东西吗)

  • 自己家的网络为什么拒绝接入(自己家的网络为什么显示无法加入)

    自己家的网络为什么拒绝接入(自己家的网络为什么显示无法加入)

  • 微信解冻收不到验证码怎么办(微信解冻为什么解冻不了)

    微信解冻收不到验证码怎么办(微信解冻为什么解冻不了)

  • 苹果8p来电的时候闪光灯在哪里开(苹果8p来电的时钟怎么调)

    苹果8p来电的时候闪光灯在哪里开(苹果8p来电的时钟怎么调)

  • 苹果天气冷充不进去电(苹果天气冷充不上电)

    苹果天气冷充不进去电(苹果天气冷充不上电)

  • vip到期缓存的还能看吗(vip缓存过期还能看吗)

    vip到期缓存的还能看吗(vip缓存过期还能看吗)

  • ipad怎么更换id账号(ipad怎样更换id账号)

    ipad怎么更换id账号(ipad怎样更换id账号)

  • 手机浏览器怎么双击(手机浏览器怎么设置电脑版)

    手机浏览器怎么双击(手机浏览器怎么设置电脑版)

  • 苹果11如何关机开机(苹果11如何关机充电)

    苹果11如何关机开机(苹果11如何关机充电)

  • 条幅红色cmyk的色值

    条幅红色cmyk的色值

  • 快手动态怎么看(快手动态怎么看不到点赞)

    快手动态怎么看(快手动态怎么看不到点赞)

  • iphone11信号改善了吗(iphone 11 信号)

    iphone11信号改善了吗(iphone 11 信号)

  • 小米9下面的喇叭只有一个响(小米9下面的喇叭是什么)

    小米9下面的喇叭只有一个响(小米9下面的喇叭是什么)

  • s1电池容量多大(五号电池多大)

    s1电池容量多大(五号电池多大)

  • 小米8怎么隐藏保存视频(小米8怎么隐藏照片)

    小米8怎么隐藏保存视频(小米8怎么隐藏照片)

  • 滴滴如何删除地址推荐(滴滴如何删除地点记录)

    滴滴如何删除地址推荐(滴滴如何删除地点记录)

  • python计数排序法是什么(python统计出现次数并排序)

    python计数排序法是什么(python统计出现次数并排序)

  • phpcms中loop标签如何使用(phpcms 标签)

    phpcms中loop标签如何使用(phpcms 标签)

  • 只拿了营业执照十年无办税好注销吗
  • 可以抵扣进项税额的增值税普通发票
  • 收取境外服务费收入如何开票
  • 什么叫简易税
  • 中华人民共和国国歌
  • 公司刚成立没有收入但是有支出怎么记账
  • 小规模不动产租赁增值税税率是多少
  • 2021年停车费税率
  • 小规模纳税人销售已使用固定资产
  • 票据占比不得超过各项贷款的
  • 经营杠杆系数分类
  • 外购动产与不动产时增值税的区别
  • 自来水差额征税政策
  • 从国外进口的免税商品
  • 特定业务计算的应纳税所得额是什么意思
  • 海关特许权使用费 公告
  • 增值税普通发票怎么开
  • 向境外支付违约金要代扣税吗
  • 发票丢失罚款标准要看金额吗
  • 没有实缴的公司法人风险大吗
  • 公司注销清算企业所得税申报表怎么填
  • 延期申报出口退税流程
  • 民间非营利组织会计报表
  • spss安装后无法启动许可证授权向导
  • 王者荣耀如何进入3D视角
  • 增值税进项税额转出的情况有哪些
  • 收到招标费用会计分录
  • javascript语言基础
  • 房地产土地使用税核减条件
  • 安博塞利国家公园简介
  • 税法中一年按多少天算
  • Laravel5.1数据库连接、创建数据库、创建model及创建控制器的方法
  • Windows 10 python 3.9安装运行Mockingbird--拎包入住功略
  • 安装traceroute命令
  • 公章盖的字不完整有效吗
  • 电子发票开出后如何查看
  • 支付宝对公账户怎么转账
  • CINLINELE工具
  • 织梦自定义字段
  • 用专项资金支付项目滞纳金合规么
  • 银行收到几分钱怎么做账
  • 启动mysql的语句
  • 现金结算的特点和概念
  • sql查询排名前三
  • sqlserver2005 master与msdb数据库备份恢复过程
  • 临时工资怎么核算
  • 母子公司合并报表案例
  • 购置环保设备一次性扣除
  • 经营净利润计算公式
  • 资本公积转增资本要交税吗
  • 提前送了礼物还要发红包吗
  • 购车税费怎样计算2023
  • 原材料用于在建工程
  • 附加税的计税依据是增值税实际缴纳税款吗
  • 公益性捐赠会计利润总额计算方法
  • 外聘人员的劳务合同模板
  • 股权变更需要做账吗
  • 航天信息开票软件客服
  • 生产型企业入库管理办法
  • sql取汉字
  • 怎样用windows
  • lsf.exe是什么
  • w3dbsmgr.exe是什么进程
  • 不需要秘密的wifi安全吗
  • xp停在windows界面
  • mac系统如何切换中文
  • un安装失败
  • KbdTray.exe - KbdTray是什么进程 有什么作用
  • node搭建博客
  • 教你学python
  • perl getoption
  • 基于nodejs的项目
  • 在shell中获取脚本命令行参数的方法和区别
  • python读写文件wr
  • js中面向对象编程
  • 广东省电子居住证怎么查看
  • 企业销售旧货增值税税率
  • 水上公安分局
  • 贵州省高新区属于哪个县
  • 简述绩效信息的收集原则
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设