Изменения данных после присвоения другой переменной - PullRequest
0 голосов
/ 06 мая 2018

Я работаю с объектом пользователя 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

Последние 2 символа теперь не совпадают среди этих переменных. Как это вообще возможно? = изменил фактические данные внутри переменной?

В случае, если это Mongoose, вот как выглядит схема:

var msgSchema = mongoose.Schema({

    message          : {
        from         : Number,
        to           : Number,
        content      : String,
        time         : Date
    }

});

Редактировать :

Если я изменюсь

to           : Number,

в строку:

to           : String,

Работает нормально. Мне все еще нужен ответ о том, почему это работает неправильно с номером. Прямо над проблемной строкой у меня есть другой идентификатор, который отлично работает:

newMessage.message.from     = msg.author.id;

Я уже пытался проанализировать taggedUser.id для целого числа или создания объекта Number (), но это не помогло. Таким образом, каждый раз, когда я превращаю taggedUser.id в число или анализирую его, int меняется на немного другое число.


Я не знаю, что думать. Как данные могут измениться во время назначения?

Если в вопросе недостаточно данных, пожалуйста, спросите меня, и я добавлю все необходимое. Я не могу представить, что может быть причиной этой ошибки.

Ответы [ 2 ]

0 голосов
/ 07 мая 2018

9007199254740992 - Самый высокий безопасный номер в JS

442090269928849410 - Ваше целое число (id)

Причиной этого небольшого отклонения является то, что JavaScript может работать с максимальной точностью.

Когда вы пытались использовать идентификатор в качестве числа, на него это повлияло, и оно изменилось, потому что JavaScript не может быть таким точным.

Если вы видите оба числа в начале этого ответа, вы можете видеть, что они разделены 2 символами, поэтому изменился только 2 последних символа.

В основном, ваше целое число зависело от максимальной точности, которую могут иметь числа JS.

Ссылка: https://developer.mozilla.org/es/docs/Web/JavaScript/Referencia/Objetos_globales/Number/MAX_SAFE_INTEGER

0 голосов
/ 06 мая 2018

Возможно, вы просто видите, что артефакт console.log работает асинхронно. Попробуйте это:

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

... и посмотрим, имеет ли это какое-то значение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...