警告:小心巨型数字的溢出异常
今天遇到个问题:后端设置了一个 id=32132132132132112(数字) 在 cookie 中。
我为了偷懒,用了个第三方组件去解析 cookie,然后发现这个数字被解析出来变成了 32132132132132110
百思不得其解,这么一个简单的 cookie parse 的组件怎么会发生这么奇怪的问题。
翻了下源码发现有这么一句:JSON.parse(xxx)。
果不其然,JSON.parse(32132132132132112) 的输出是 32132132132132110。
很明显,这应该是溢出的问题,JS 能处理的数字都是浮点数,超出范围则会忽略了。
JS中整数的数字范围是 -2^53~2^53, 超出则视为 2^53 处理,注意这个并不会报错,所以如果你在使用巨型数字前没有意识到这个问题,意味着项目上线后,你将可能丢失用户数据。
所以遇到这种问题,要么限制数字输入在可控范围内,要么在不需要计算的时候,将这种数字串存为字符串,要么使用一些能处理巨型计算的库来解决问题,比如 https://github.com/jtobey/javascript-bignum 或 https://www.npmjs.com/package/json-bigint
参考资料:https://www.irt.org/script/1031.htm
关键字:JavaScript, 数字, cookie, rse
版权声明
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处。如若内容有涉嫌抄袭侵权/违法违规/事实不符,请点击 举报 进行投诉反馈!