Почему variable.constructor === Object иногда возвращает истину, а иногда - ложь?

У меня такой сценарий:

В своем тесте я объявляю переменную

 const query = {
      where: { publishedCount: { inq: [2, 3] } },
  };

и когда я проверяю, является ли переменная объектом, используя .constructor === Object, я получаю истину

console.info(query.constructor === Object); // true

В следующей строке я передаю ту же переменную функции, и внутри этой функции сравнение возвращает ложный.

app.models.Group.find(query);

function find(query) {
  console.info(query) // prints: where: { publishedCount: { inq: [2, 3] } },
  console.info(query.constructor) // prints: function Object() {}
  console.info(query.constructor === Object) // FALSE
} 

Мой код работает на Node v8.10.0 и Jest runner v23.4.2. В обоих случаях запрос печати возвращает правильный объект, а печать query.constructor возвращает function Object() {}.

Я сделал простую проверку с помощью JSBIn, и сравнение вернулось два раза. https://jsbin.com/wotuperode/edit?js,console

Что это происходит?

PS. Я не могу изменить способ проверки типа объекта, потому что одна из библиотек из node_modules проверяет таким образом

ОБНОВЛЕНИЕ 1

Я вызываю функцию find из библиотеки loopback. Эта функция поиска доступна во всех моделях данных в вашем приложении. https://github.com/strongloop/loopback-datasource-juggler/blob/master/lib/dao.js#L1897

Сравнение, используемое библиотекой, находится здесь: https://github.com/strongloop/loopback-connector-postgresql/blob/master/lib/postgresql.js#L554 (библиотека добавляет соединитель postgres в loopback)

Мой полный код

 describe("Tests", () => {
   it("update array of elements", async () => {
      // creating objects etc
      ...
      const query = {
          where: { publishedCount: { inq: [2, 3] } },
      };
      await app.models.Group.find(query); // my code has await but even without await the comparison still returns false
      ... 
      // expects etc
   });
 });

ОБНОВЛЕНИЕ 2

Это происходит только в моем тесты, когда я запускаю код с помощью Шутка runner.

Вы пробовали логировать query в своей функции?

Zenoo 10.08.2018 11:14

Ваш код когда-либо создает еще один объект query? Как он создает этот объект?

evolutionxbox 10.08.2018 11:18

«одна из библиотек из node_modules проверяет таким образом» - не могли бы вы подробнее рассказать о вашей реальной проблеме, включая библиотеку, которую вы вызываете (со ссылкой на код и / или документы), а также ваш фактический код? Нам нужен минимальный воспроизводимый пример - jsbin, который не воспроизводит проблему, не поможет.

Bergi 10.08.2018 11:19

@Zenoo Я обновил свой вопрос. В обоих случаях запрос выглядит одинаково.

niba 10.08.2018 11:20

@evolutionxbox нет, я выполняю функцию поиска в следующей строке сразу после создания объекта запроса

niba 10.08.2018 11:20

Невозможно ответить, не увидев рассматриваемого кода ...

Axel F 10.08.2018 11:20

@AxelF Я обновился, посмотрите сейчас

niba 10.08.2018 11:27

@Bergi Проверьте сейчас, я добавил как можно больше. Он работает на Node, поэтому мне нужно подготовить репозиторий. Я могу сделать это позже, потому что сейчас у меня нет на это времени

niba 10.08.2018 11:35
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
0
8
103
0

Другие вопросы по теме