Итак, у меня есть структура схемы мангуста:
const execStatusScheema = new mongoose.Schema(...)
const notifyScheema = new mongoose.Schema({
...
sms: {
type: Boolean,
required: true
},
smsStatus: {
type: execStatusScheema
},
telegram: {
type: Boolean,
required: true
},
telegramStatus: {
type: execStatusScheema
},
voice: {
type: Boolean,
required: true
},
voiceStatus: {
type: execStatusScheema
}
})
const Notify = mongoose.model('Notify', notifyScheema)
module.exports.Notify = Notify
как вы можете видеть в схеме уведомлений smsStatus, voiceStatus и telegramStatus не требуются. Если sms имеет значение false, свойство smsStatus не задано в моем коде, а для голоса и телеграммы такое же поведение. Я хочу отметить в уведомлении некоторые из этих свойств. Я делаю следующее:
const uncomplitedNotifies = await Notify.find(...).select('smsStatus voiceStatus telegramStatus sms voice telegram')
uncomplitedNotifies.forEach(async notify => {
console.info(notify)
if ('telegramStatus' in notify) {
console.info('123')
}
...
Результат:
{ _id: 5ba07aaa1f9dbf732d6cbcdb,
priority: 5,
sms: true,
telegram: false,
voice: false,
smsStatus:
{ status: 'run',
_id: 5ba07aaa1f9dbf732d6cbcdc,
errMessage: 'Authentication failed',
statusDate: '2018-9-18 12:10:19' } }
123
Хорошо, я нашел один, и все в порядке, но мой статус if верен, даже если у меня нет этого свойства в моем объекте. Я предполагаю, что он проверяет объект схемы, где он объявлен, но я хочу проверить свой «настоящий» объект, который я получил по запросу. Я тоже пробую этот проверочный случай, но результат тот же:
if (typeof something === "undefined") {
alert("something is undefined");
}
Как я могу правильно проверить этот объект?
О, это работает. Я вижу «да», так что это не определено. Может, я ошибаюсь, пытаясь самостоятельно.



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Оператор in проверяет собственные свойства объекта и его цепочку прототипов. Неустановленные свойства находятся в цепочке прототипов вашего объекта, но не в собственных свойствах объекта:
const hasTelegramStatus = 'telegramStatus' in document; // true
const hasTelegramStatus = document.hasOwnProperty('telegramStatus') // false
Один из вариантов - преобразовать запрос в объект, выполнив document.toObject(), который удалит цепочку прототипов и вернет только собственные свойства.
Итак, если вы наберете
if (typeof notify.telegramStatus === 'undefined') console.info('yes'), сможете ли вы увидетьyesв консоли?