JavaScript使用parseInt()的坑小结

JavaScript使用parseInt()的坑小结

场景是根据包含几个变量的字符串算一个签名
例如

var data = {
            type: this.type,
            timestamp: this.timestamp,
            id: this.id,
        };
var s = 'hello';
var b = 'world'; 
var k = `${s}&${b}&${JSON.stringify(data)}`;

期待的变量k应该长这样

'hello&world&{"type":0,"timestamp":1488191490594,"id":9800000000085572}'

id是一个16位的数字串

本来this.id是一个string类型,但是经过JSON格式化后,会自动为string类型加上双引号,这样算出来的签名的值就会发生变化。
一开始的解决方式比较粗暴,就是把id值转换成Number格式

id: parseInt(this.id)

但是后来发现,parseInt返回的结果相对于本来的值会发生改变

>> parseInt("9800000000085573")
output: 9800000000085572

查询What is JavaScript's highest integer value that a Number can go to without losing precision?后发现js能安全处理的最大整数为:9007199254740991

最后采用字符串替换的方式解决:

var data = {
            type: this.type,
            timestamp: this.timestamp,
            id: "tmpid",
        };
var s = 'hello';
var b = 'world'; 
var k = `${s}&${b}&${JSON.stringify(data).replace('"tmpid"', this.id)}`;
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 135,442评论 19 139
  • ¥开启¥ 【iAPP实现进入界面执行逐一显】 〖2017-08-25 15:22:14〗 《//首先开一个线程,因...
    小菜c阅读 11,730评论 0 17
  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 31,952评论 18 399
  • 张三和李四同时受雇于一家店铺,拿同样的薪水。一段时间后,张三青云直上,李四却原地踏步。李四想不通,老板为何厚此薄彼...
    爱生活爱折腾阅读 6,246评论 0 1
  • 客厅里,弟弟一边啃着甘蔗,一边看着电视。弟弟已经二十五岁了,正是谈女朋友的年纪,我决定给他上一课,好让他的择偶之路...
    洋烊阅读 3,856评论 0 1