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

  • 同一控制下的长期股权投资入账成本
  • 税控盘技术维护费申报时候怎么填报
  • 土地使用权契税入账会计分录
  • 加盟费是怎么回事
  • 公司现金支票取钱需要带什么资料
  • 代开专票收入未超30万税务怎么处理
  • 基本户没有注销对法人有影响吗
  • 工程项目成本控制的方法
  • 台湾企业不能在大陆或香港上市吗
  • 合并财务报表内部交易对净利润影响
  • 税款多交一分钱怎么做分录
  • 购买的厂房怎样交税
  • 差额征税条件
  • 中央非税收入统一票据怎么做账
  • 网络直播应如何缴纳增值税?
  • 土地出让金缴纳契税计税依据
  • 打官司收案是什么意思
  • 借款本金和借款余额
  • 增值税普通发票红冲之后还能查询吗
  • 无形资产减值损失后能不能转回
  • 预借差旅费计入其他应收款吗
  • linux中压缩
  • 注册会计师考试成绩查询2023
  • PHP:xml_parser_get_option()的用法_XML解析器函数
  • php用户登录用的什么技术
  • 确定无形资产使用寿命时应当考虑的因素有
  • php教程 ftp 函数
  • 在途物资退货会退款吗
  • 银边翠的栽培历史
  • zendstudio怎么创建php项目
  • yii2 resetful 授权验证详解
  • php调用外部程序
  • 增值税申报主表在哪里查询
  • 股东分红应该在哪个科目
  • 股权转让完税证明要多少时间
  • 劳务公司企业所得税税负率
  • wordpress最新版本
  • 强大的图片预览软件
  • js数组菜鸟教程
  • 预付采购材料款60000元
  • 接受专利投资会计科目
  • 上年度固定资产少入账了怎么办?
  • 土地增值税扣除率怎样计算
  • 给国外公司提供服务需要交哪些税
  • mongodb document
  • mongodb bi
  • 如何准确理解nosql的含义?
  • 应收处理的两大内容是什么
  • 废品材料回收的会计分录
  • 小型生产加工企业税率
  • 应付职工薪酬会计凭证
  • 营业利润是负数什么原因
  • 涉及无形资产的会计处理
  • 管理人员工资结构
  • 给员工打了备用金后归还怎么做账
  • 某首饰商城为增值税一般纳税人,2021年1月发生以下业务
  • 房地产储备土地排名
  • 交易性金融资产属于流动资产
  • 公司购买的意外险计入什么科目
  • 营业税金及附加会计分录
  • 微信和支付宝的区别
  • linux 查看numa
  • select into 和 insert into select 两种表复制语句
  • windows隐藏administrator
  • mac开机密码怎么取消
  • windows8家庭版和专业版区别
  • git连接linux服务器
  • 怎么设置开机启动项?
  • win7总是弹出广告怎么办
  • linux安装编译工具
  • win7系统360浏览器自动打开怎么关闭
  • linux如何进行命令操作
  • 简述linux的系统结构
  • win10更新提示错误
  • cocos2dx官方教程
  • 函数里面声明函数
  • 批处理统计文件夹内文件大小
  • unit uniform
  • android drawable 圆角锯齿
  • javascript教程chm
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设