示例是:
const objectId = new mongoose.Types.ObjectId('id would go here');
if (_.isEmpty(objectId)) {
throw new Error('this throws an error');
}
运行上面的代码,只是想知道这是否是新的,对于它的价值,这段代码之前没有被破坏过。
使用以下代码:
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
。