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

时间:2018-05-06 04:41:25

标签: javascript node.js mongodb mongoose

我使用Discord.js用户对象和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分配给Schema。一切正常,但......

  

442090269928849410

     

442090269928849400

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

如果是Mongoose,这就是Schema的样子:

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时,它都会更改为略有不同的数字。

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

如果问题中没有提供足够的数据,请问我,我会添加所需的一切。我无法想象可能导致这个错误的原因。

2 个答案:

答案 0 :(得分:2)

  

9007199254740992 - JS中最高的安全号码

     

442090269928849410 - 您的整数(id)

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

当您尝试将id用作数字时,它受此影响而且已更改,因为JavaScript不能那么精确。

如果您在此答案的开头看到这两个数字,则可以看到它们被2个字符分开,这就是为什么只有最后一个字符发生了变化。

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

参考:https://developer.mozilla.org/es/docs/Web/JavaScript/Referencia/Objetos_globales/Number/MAX_SAFE_INTEGER

答案 1 :(得分:0)

您可能只是看到doReturn(1).when(securityService).getUserIdByPrincipal(any(Principal.class));异步运行的工件。试试这个:

console.log

......看看这是否有所不同。