簡體   English   中英

JS檢查現有鍵返回對象的未定義

[英]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中的文檔的一對一映射。 每個文檔都是其模型的一個實例。

http://mongoosejs.com/docs/documents.html

如果檢查Document API ,則會看到它具有toObject()方法 我建議您在返回數組的第一項中嘗試一下。

但是您仍然可能會問為什么JSON.parse(JSON.stringify(obj))為您工作。 好吧,如果檢查JSON.stringifyMDN文檔 ,您將意識到它在要被字符串化的對象中查找toJSON方法 ,如果已實現該方法,它將自定義字符串化行為。 你猜怎么着? 是的, 貓鼬文檔實現了該方法 ,然后您的文檔將被正確地字符串化為JS Object Literal,然后通過調用JSON.parse再次進行解析。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM