记开发中遇到的两个js最大安全值问题

简介:

云栖号资讯:【点击查看更多行业资讯
在这里您可以找到不同行业的第一手的上云资讯,还在等什么,快来!


最近开发过程中发现有两种case都是因为js精度导致的问题,记录一下~

Case 1:后端要求前端对某个值限制最大long型

后端大大说线上发现一种报错case,用户输入的id超过了Java Long型最大值,因为Long类型解析异常,直接返回系统异常。后端大大希望前端能加个校验,对输入的id进行下判断,超过Long型最大值时提示下输入的id不合法,能优化用户体验。

不得不说这个要求很合理,我没有拒绝的理由。好吧,代码撸起来。我设想的是就是封一个函数,入参是个字符串数字,我判断下这个值是否超过Long型最大值。写完之后在控制台进行试验。

1

咦,为啥有几个预期返回true的却返回的false,百度之后发现是因为超过js最大安全值时出现精度丢失的问题。

再改造一波代码:

2

Case 2: 后端返回的数字超过js最大安全值

事情是这样的,在详情页前端把某个id传给了后端,提交成功之后回到了列表页,此时进入详情页时发现后端接口提示该id数据不存在。常规操作就是截图入参给后端让他看下啥情况,此时后端大大说这个id确实不在数据库里面。

纳尼,我创建的时候都提示成功了,为啥会不在数据库里面,不行,我要找证据证明我这个id是创建成功了的。

好咯,从头开始创建,打开控制台,开启Presever log,点击提交,看下入参,没问题,就是我这个id。好哒,来到列表页了,看下后端返回的数据,What!!!,这个id咋么和我创建时候传的不一样,啊啊啊,我好像找到真凶了,这看起来就是后端的锅,开森~~~截图下列表返回值和创建时的入参丢到群里,艾特下可爱的后端大大。

有人会问,为啥你创建的时候这个值显示的是正常的,哈哈哈,因为我创建的时候传的是字符串,后端存数据库的时候存的是long型。

此时不得不说一下js的最大安全值(2的53次方减1),即即9007199254740992,这个值有16位,当超过这个值时,就会出现精度丢失问题。

3

这个事情最终的处理方案就是:后端将该id的数据类型改成string。

【云栖号在线课堂】每天都有产品技术专家分享!
课程地址:https://yqh.aliyun.com/zhibo

立即加入社群,与专家面对面,及时了解课程最新动态!
【云栖号在线课堂 社群】https://c.tb.cn/F3.Z8gvnK

原文发布时间:2020-04-15
本文作者:斯人爱学习
本文来自:“掘金”,了解相关信息可以关注“掘金”

相关文章
|
6天前
|
Web App开发 缓存 JavaScript
深入浅出Node.js后端开发
【9月更文挑战第26天】本文将引导你了解Node.js的基本原理,并通过实际案例展示如何在后端开发中应用它。我们将从Node.js的核心概念讲起,逐步深入到构建一个完整的后端服务,最后探讨如何优化你的Node.js应用。准备好让你的开发技能更上一层楼了吗?让我们一起潜入Node.js的世界!
|
8天前
|
JavaScript 前端开发 API
深入浅出Node.js后端开发
【9月更文挑战第23天】在这篇文章中,我们将探索Node.js的世界,了解它如何改变后端开发的面貌。通过实际案例和代码示例,我们不仅学习Node.js的核心概念,还会深入探讨它的高级特性,如异步编程、事件驱动模型以及微服务架构的应用。无论你是初学者还是有经验的开发者,这篇文章都将为你提供新的视角和实用技能,帮助你构建更高效、可扩展的后端系统。
41 19
|
6天前
|
JavaScript 开发者
深入理解Node.js事件循环及其在后端开发中的应用
【8月更文挑战第57天】本文将带你走进Node.js的事件循环机制,通过浅显易懂的语言和实例代码,揭示其背后的工作原理。我们将一起探索如何高效利用事件循环进行异步编程,提升后端应用的性能和响应速度。无论你是Node.js新手还是有一定经验的开发者,这篇文章都能给你带来新的启发和思考。
|
4天前
|
Web App开发 JavaScript 前端开发
探索现代JavaScript开发:ECMAScript提案的未来
JavaScript是最受欢迎的编程语言之一,其发展迅速。ECMAScript(JS的标准化版本)的提案和更新为其带来了诸多新特性和改进。本文将介绍值得关注的ECMAScript提案,如可选链、空值合并运算符、逻辑赋值运算符、类字段和顶级Await,并展示如何利用这些新特性提升开发效率和代码质量。通过关注TC39提案流程、使用Babel和TypeScript等工具,开发者可以提前体验并利用这些新特性。随着JavaScript的不断进步,未来将有更多令人期待的功能加入。
|
6天前
|
Web App开发 JavaScript 前端开发
深入浅出Node.js后端开发
【9月更文挑战第25天】本文将带你了解Node.js的基本概念和核心优势,同时提供一些实际的代码示例来加深理解。无论你是初学者还是有一定经验的开发者,都能通过本文获得有价值的信息和技巧。让我们一起探索Node.js的世界吧!
|
17天前
|
Web App开发 存储 JavaScript
深入浅出Node.js后端开发
【9月更文挑战第15天】在数字化浪潮中,Node.js作为一颗耀眼的星辰,为后端开发领域注入了活力与创新。本文将带你领略Node.js的魅力所在,探索其架构设计、性能优化及实战应用,让你在轻松愉快的氛围中掌握Node.js后端开发的精髓。
|
20天前
|
Web App开发 JavaScript 前端开发
深入浅出Node.js后端开发
【9月更文挑战第11天】本文将带你走进Node.js的世界,了解其背后的运行机制和实际应用。我们将从基础概念出发,逐步深入到实战应用,最后通过代码示例巩固学习成果。无论你是初学者还是有一定经验的开发者,这篇文章都将为你提供新的视角和思考。
|
19天前
|
JavaScript 前端开发 API
深入浅出Node.js后端开发
【9月更文挑战第13天】本文将带你进入Node.js的世界,从基础概念到实际案例,深入浅出地探讨如何利用Node.js进行后端开发。通过本文的学习,你将了解Node.js的工作原理、核心模块、以及如何构建一个简单的Web应用。无论你是初学者还是有一定经验的开发者,这篇文章都将为你提供有价值的见解和技巧。
|
20天前
|
Web App开发 JavaScript NoSQL
深入浅出Node.js后端开发
在数字化时代的浪潮中,后端开发作为技术支柱之一,承载着数据处理和业务逻辑实现的重要任务。本文将通过浅显易懂的方式,带你走进Node.js的世界,从基础概念到实战应用,逐步揭开后端开发的神秘面纱。无论你是编程新手还是希望扩展技术栈的开发者,这篇文章都将为你提供有价值的指导和启示。让我们一起探索如何在不断变化的技术环境中,保持初心,寻找属于自己的方向,并成为希望在世界上看到的改变。
29 1
|
20天前
|
缓存 JavaScript 前端开发
深入浅出Node.js后端开发
【9月更文挑战第11天】本文将带你进入Node.js的世界,探索其背后的哲学、核心概念以及如何利用它来构建高效、可扩展的后端服务。无论你是前端开发者寻求全栈技能,还是后端开发者希望拓宽技术栈,这篇文章都将为你提供价值。我们将从基础讲起,逐步深入到实战应用,让你对Node.js有一个全面而深刻的理解。
30 2
下一篇
无影云桌面