我使用Discord.js用户对象和Mongoose模式。但是问题似乎不属于这些。
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分配给Schema。一切正常,但是...
442090269928849410
442090269928849400
这些变量中的最后2个字符现在不同。这怎么可能?
=
更改了变量内的实际数据?如果是猫鼬,这里是架构的样子:
var msgSchema = mongoose.Schema({
message : {
from : Number,
to : Number,
content : String,
time : Date
}
});
编辑:
如果我改变
to : Number,
字符串:
to : String,
它正常工作。我仍然需要答案,为什么它不能正确使用数字。在问题行的正上方,我有另一个工作正常的id:
newMessage.message.from = msg.author.id;
我已经尝试将aggedUser.id解析为整数或创建Number()对象,但这无济于事。因此,每次将
taggedUser.id
转换为数字或将其解析为整数时,它都会更改为稍有不同的数字。我不知道该怎么想分配期间数据如何更改?
如果问题中提供的数据不足,请询问我,然后我将添加所有需要的信息。我无法想象可能导致此错误的原因。
最佳答案
9007199254740992-JS中的最高安全号码
442090269928849410-您的整数(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/