gpt4 book ai didi

javascript - 分配给另一个变量后数据发生变化

转载 作者:行者123 更新时间:2023-12-01 02:04:50 25 4
gpt4 key购买 nike

我使用 Discord.js User 对象和 Mongoose Schema。但问题似乎并不属于其中。

var Message = require('../app/models/message'); //Mongoose Schema
...
var newMessage = new Message();
...
//taggedUser is an object containing all the info about user. id property contains user id which is number.
const taggedUser = message.mentions.users.first();

newMessage.message.to = taggedUser.id;
console.log(taggedUser.id);
console.log(newMessage.message.to);

上面的代码应将用户 ID 分配给架构。一切正常,但是...

442090269928849410

442090269928849400

现在这些变量中的最后 2 个字符不相同。这怎么可能? = 改变了变量内的实际数据?

如果是 Mongoose,架构如下所示:

var msgSchema = mongoose.Schema({

message : {
from : Number,
to : Number,
content : String,
time : Date
}

});
<小时/>

编辑:

如果我改变

to           : Number,

到字符串:

to           : String,

它工作正常。我仍然需要知道为什么这对数字不能正确工作的答案。在有问题的行上方,我有另一个 id,它工作得很好:

newMessage.message.from     = msg.author.id;

我已经尝试将 taggedUser.id 解析为整数或创建 Number() 对象,但这没有帮助。因此,每次我将 taggedUser.id 转换为数字或将其解析为 int 时,它都会更改为略有不同的数字。

<小时/>

我不知道该怎么想。数据在分配期间如何改变?

如果问题中没有提供足够的数据,请询问我,我将添加所需的所有内容。我无法想象是什么导致了这个错误。

最佳答案

9007199254740992 - Highest safe number in JS

442090269928849410 - Your integer (id)

这种小变化的原因是 JavaScript 可以使用的“最大精度”。

当您尝试将 id 用作数字时,它会受到此影响并发生变化,因为 JavaScript 无法做到那么精确。

如果您在这个答案的开头看到两个数字,您会发现它们由 2 个字符分隔,这就是为什么只有最后 2 个字符发生变化。

基本上你的整数受到 JS 数字可以具有的最大精度的影响。

引用:https://developer.mozilla.org/es/docs/Web/JavaScript/Referencia/Objetos_globales/Number/MAX_SAFE_INTEGER

关于javascript - 分配给另一个变量后数据发生变化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50196302/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com