[英]JS checking an existing key returns undefined for an object
最近,在JavaScript對象鍵中訪問值時,我遇到了未定義的錯誤。 我使用mongoose.find().exec()
回調獲得了對象數組,並且我正在驗證每個對象是否具有特定鍵。
這是示例對象
{"promo_id":"5af1c07d5542fc9307847a6a",
"__v":0,
"description":"Hello",
"available_count":0}
obj.hasOwnProperty('available_count')
它返回false
lodash
_.isObject()
測試對象時,它返回了true。 JSON.parse(JSON.stringify(obj))
使其工作。 為什么會遇到這種有線行為,這將是很棒的。
let o = {"promo_id":"5af1c07d5542fc9307847a6a", "__v":0, "description":"Hello", "available_count":0} let result = o.hasOwnProperty('available_count'); console.log(result)
如Mongoose docs所說, query.find()
返回一個文檔數組 。 貓鼬文檔不是JS文字對象:
Mongoose文檔代表與存儲在MongoDB中的文檔的一對一映射。 每個文檔都是其模型的一個實例。
如果檢查Document API ,則會看到它具有toObject()方法 。 我建議您在返回數組的第一項中嘗試一下。
但是您仍然可能會問為什么JSON.parse(JSON.stringify(obj))
為您工作。 好吧,如果檢查JSON.stringify
上的MDN文檔 ,您將意識到它在要被字符串化的對象中查找toJSON
方法 ,如果已實現該方法,它將自定義字符串化行為。 你猜怎么着? 是的, 貓鼬文檔實現了該方法 ,然后您的文檔將被正確地字符串化為JS Object Literal,然后通過調用JSON.parse
再次進行解析。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.