为什么variable.constructor ===对象有时返回true,有时返回false?

时间:2018-08-10 09:12:17

标签: javascript node.js jestjs

我有以下情况:

在测试中,我声明了一个变量

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

,当我使用.constructor === Object来检查变量是否为对象时,我得到了真

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

在下一行中,我将相同的变量传递给函数,并且在该函数内部,比较返回 false

app.models.Group.find(query);

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

我的代码在Node v8.10.0和JestRunner v23.4.2上运行。在这两种情况下,打印查询都返回正确的对象,而打印query.constructor返回function Object() {}

我使用JSBIn进行了简单的检查,在那里比较两次返回true 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

lib使用的比较在这里:https://github.com/strongloop/loopback-connector-postgresql/blob/master/lib/postgresql.js#L554 (lib将postgres连接器添加到环回)

我的完整代码

 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

仅当我使用 Jest 运行程序运行代码时,这才在我的测试中发生。

0 个答案:

没有答案