Featured image of post JavaScript

JavaScript

注意事项

JavaScript 解析 JSON 内含有 int64 时的精度丢失问题

JavaScript 中的 Number 类型是双精度浮点数,最大安全整数是 2^53 - 1,即 9,007,199,254,740,991,超过这个数的整数会丢失精度。

解决方法

在前端重写 JSON.parse 方法,将 int64 转换为字符串。

1
2
3
4
5
6
7
8
9
const parse = JSON.parse;
JSON.parse = function (text, reviver) {
    return parse(text, function (key, value) {
        if (typeof value === 'number' && Number.isInteger(value) && !Number.isSafeInteger(value)) {
            return String(BigInt(value));
        }
        return reviver ? reviver(key, value) : value;
    });
};
Licensed under CC BY-NC-SA 4.0