为什么 lodash 认为 mongoose 对象 id 为空,而以前却不是?

问题描述 投票:0回答:1

示例是:

const objectId = new mongoose.Types.ObjectId('id would go here');
  if (_.isEmpty(objectId)) {
    throw new Error('this throws an error');
  }

运行上面的代码,只是想知道这是否是新的,对于它的价值,这段代码之前没有被破坏过。

typescript mongodb mongoose lodash
1个回答
0
投票

使用以下代码:

const _ = require("lodash");
const mongoose = require("mongoose");

const objectId = new mongoose.Types.ObjectId('deadcaffee00deadbeef1122');

const isEmpty = _.isEmpty(objectId);

console.log("keys", Object.keys(objectId));
for (let i in objectId) {
    console.log("property", i, objectId[i]);
}

console.log({ objectId, isEmpty });

您可以看到

objectId
仅包含一个属性,其键为
Symbol

您会注意到它没有记录为属性(仅记录

valueOf
),并且键数组为空。

查看源代码,您会看到它使用 for-in 循环迭代键,就像我记录属性一样。

由于我们没有记录满足

hasOwnProperty
的属性,因此循环结束并返回
true

© www.soinside.com 2019 - 2024. All rights reserved.