我使用 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 数字可以具有的最大精度的影响。
关于javascript - 分配给另一个变量后数据发生变化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50196302/