Javascript 分配给另一个变量后,数据会发生更改
我使用Discord.js用户对象和Mongoose模式。但问题似乎不在其中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
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字段的名称,这就是为什么您使用字符串!(精度也是个问题!)