我使用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/

10-15 21:28
查看更多