这是一个错误吗? Javascript 在赋值时更改变量的数值

问题描述 投票:0回答:2

好吧,这听起来很疯狂,但我已经在几个浏览器和三台不同的机器上测试了它(尽管都是 Windows)。一旦我为变量分配特定的数值,它就会立即递增。对我来说问题是这个特定值是不应该更改的数据库对象 ID 之一。

尝试过最新的 Chrome、Firefox 和 Edge。测试起来非常简单:

let a = 17841410687956931;
console.log(a);
// output is 17841410687956932

我也尝试过

let a = [17841410687956931];
let a = {17841410687956931: "anything"};
,它仍然在增加。
const
var
不会改变任何事情。请注意,17841410687956930 和 17841410687956932 完全没问题,不要行为不当。

我看到东西了吗?这可以是一些复活节彩蛋吗?你能给我推荐一个好的医生吗?

javascript variable-assignment
2个回答
0
投票

JavaScript 默认使用 IEEE 754 定义的精度。此格式为整数值提供 53 位精度。您提供的号码 17841410687956931 需要超过 53 位。

使用 ECMAScript 2020 中引入的 BigInt:

let a = BigInt("17841410687956931");
console.log(a);

0
投票

这是与JavaScript大数处理相关的精度问题。 JavaScript 使用 64 位浮点表示数字,超过某个点,它就无法再准确地表示连续整数。

尝试通过在末尾添加“n”将您的号码转换为 BigInt,如下所示:

let a = 17841410687956931n;
console.log(a);

“n”告诉 JavaScript 将数字视为

BigInt
,这将更准确地处理大整数。

© www.soinside.com 2019 - 2024. All rights reserved.