Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/37.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 分配给另一个变量后,数据会发生更改_Javascript_Node.js_Mongodb_Mongoose - Fatal编程技术网

Javascript 分配给另一个变量后,数据会发生更改

Javascript 分配给另一个变量后,数据会发生更改,javascript,node.js,mongodb,mongoose,Javascript,Node.js,Mongodb,Mongoose,我使用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 n

我使用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。一切正常,但是

442090269928849410

442090269928849400

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

如果它是猫鼬,下面是模式的样子:

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解析为integer或创建Number()对象,但没有帮助。因此,每次我将
taggedUser.id
转换为一个数字或将其解析为int时,它都会更改为稍微不同的数字


我不知道该怎么想。作业期间数据如何更改


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

您可能只是看到了
console.log
异步运行的工件。试试这个:

console.log('' + taggedUser.id);
console.log('' + newMessage.message.to);

…然后看看这是否有什么不同。

您可能只是看到了
console.log
异步运行的工件。试试这个:

console.log('' + taggedUser.id);
console.log('' + newMessage.message.to);
…看看这有什么不同

9007199254740992-JS中的最高安全数字

442090269928849410-您的整数(id)

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

当您尝试将id用作数字时,它受到了此影响,并且发生了更改,因为JavaScript不能如此精确

如果你在这个答案的开头看到两个数字,你可以看到它们被两个字符分开,这就是为什么只有最后两个字符改变了

基本上,整数受JS数字的最大精度影响

参考:

9007199254740992-JS中的最高安全数字

442090269928849410-您的整数(id)

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

当您尝试将id用作数字时,它受到了此影响,并且发生了更改,因为JavaScript不能如此精确

如果你在这个答案的开头看到两个数字,你可以看到它们被两个字符分开,这就是为什么只有最后两个字符改变了

基本上,整数受JS数字的最大精度影响


参考资料:

感谢您的快速回复。我试过了,但是没有改变。谢谢你的快速回复。我试过了,但没有任何改变。@Neil Lunn我没有从MongoDB检索任何数据。我正在创建一个新对象。“副本”与我的问题完全无关。显示从何处获取对象的周围代码,然后进行赋值。您的问题目前没有指明新消息的来源。不要责怪我们在它“看起来像鸭子”的时候大声叫喊。由您来演示一个清晰的示例。@Neil Lunn noone要求我提供更多的代码,它只是被积极地标记为重复。我更新了问题,代码中没有任何其他内容可能会影响流程。因此,您实际上没有分配
newMessage.message
任何位置,对吗?“唯一”代码直接进入
newMessage.message.to=
。因为这就是这里的样子。也要降低你的语调。没有人“积极”地做任何事情。@Neil Lunn是的,除了你能看到的地方,我不会把它分配到任何地方。所以这真的很奇怪。只有1个符号怎么能改变?为什么?@Neil Lunn我没有从MongoDB检索任何数据。我正在创建一个新对象。“副本”与我的问题完全无关。显示从何处获取对象的周围代码,然后进行赋值。您的问题目前没有指明新消息的来源。不要责怪我们在它“看起来像鸭子”的时候大声叫喊。由您来演示一个清晰的示例。@Neil Lunn noone要求我提供更多的代码,它只是被积极地标记为重复。我更新了问题,代码中没有任何其他内容可能会影响流程。因此,您实际上没有分配
newMessage.message
任何位置,对吗?“唯一”代码直接进入
newMessage.message.to=
。因为这就是这里的样子。也要降低你的语调。没有人“积极”地做任何事情。@Neil Lunn是的,除了你能看到的地方,我不会把它分配到任何地方。所以这真的很奇怪。为什么只有一个符号可以改变?哦。。。我从没想过。非常感谢!所以我应该用字符串来存储这些ID?Discord是如何存储它们的?(理论上)是的,discord使用id来识别用户:例如,如果您试图用
id='123'
discord将该用户保存为这样:
'123':用户名:'abc'等…(json格式)
,基本上您不能使用数字作为json字段的名称,这就是为什么您使用字符串!(而且精度也是个问题!)哦。。。我从没想过。非常感谢!所以我应该用字符串来存储这些ID?Discord是如何存储它们的?(理论上)是的,discord使用id来识别用户:例如,如果您试图用
id='123'
discord将该用户保存为这样:
'123':用户名:'abc'等…(json格式)
,基本上您不能使用数字作为json字段的名称,这就是为什么您使用字符串!(精度也是个问题!)