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

标签 javascript node.js mongodb mongoose

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

442090269928849410

442090269928849400

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

如果是 Mongoose,架构如下所示:

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

<小时/>

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

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

最佳答案

9007199254740992 - Highest safe number in JS

442090269928849410 - Your integer (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/

相关文章:

node.js - 无法让 http-server 从 angular-seed github 项目中使用 nodejs 命令行运行

node.js - Mongoose :查找与条件不匹配的文档和修剪数组元素

javascript - 更改javascript类背景颜色

javascript - 如何通过 jquery 在 Web 应用程序中创建字符串资源管理器系统?

javascript - 在美元符号之间渲染 LaTeX,就像 math.SE 所做的那样

javascript - 使用 cheerio(JQuery API)在 Node js 上解析

node.js - 如何修复 macOS 上的 node.js 写入文件权限被拒绝错误?

node.js - 'gulp' 未被识别为内部或外部命令

node.js - Sequelize 错误的查询?查找参数

node.js - 投影返回 "$arrayElemAt"的元素