正告:警惕巨型数字的溢出非常

本日碰到个题目:后端设置了一个 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-bignumhttps://www.npmjs.com/package/json-bigint

参考资料:https://www.irt.org/script/1031.htm

    原文作者:赖小赖小赖
    原文地址: https://segmentfault.com/a/1190000005856131
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞