下面,您可以看到这两个日志的输出。第一个清楚地显示了具有我试图访问的属性的完整对象,但在下一行代码中,我无法访问它config.col_id_3
(请参阅屏幕截图中的“未定义”?)。谁能解释一下?我可以访问除此之外的所有其他属性field_id_4
。
console.log(config);
console.log(config.col_id_3);
这是这些行在控制台中打印的内容
下面,您可以看到这两个日志的输出。第一个清楚地显示了具有我试图访问的属性的完整对象,但在下一行代码中,我无法访问它config.col_id_3
(请参阅屏幕截图中的“未定义”?)。谁能解释一下?我可以访问除此之外的所有其他属性field_id_4
。
console.log(config);
console.log(config.col_id_3);
这是这些行在控制台中打印的内容
的输出具有console.log(anObject)
误导性;显示对象的状态仅在您通过单击 展开控制台中显示的对象树时解析>
。当你得到对象时,它不是对象的状态console.log
。
相反,尝试console.log(Object.keys(config))
,甚至console.log(JSON.stringify(config))
,您将看到键,或调用时对象的状态console.log
。
您(通常)会在您console.log
致电后发现正在添加密钥。
我刚刚遇到了使用Mongoose从 MongoDB 加载的文档的问题。
在console.log()
整个对象上运行时,所有文档字段(存储在数据库中)都会显示出来。然而undefined
,当其他属性访问器(包括_id
)工作正常时,某些单独的属性访问器会返回。
原来,属性访问器仅适用于我的mongoose.Schema(...)
定义中指定的那些字段,而console.log()
并JSON.stringify()
返回存储在数据库中的所有字段。
解决方案(如果您使用的是 Mongoose):确保您的所有 db 字段都在mongoose.Schema(...)
.
检查对象内部是否有对象数组。我对 JSON 有类似的问题:
"terms": {
"category": [
{
"ID": 4,
"name": "Cirugia",
"slug": "cirugia",
"description": "",
"taxonomy": "category",
"parent": null,
"count": 68,
"link": "http://distritocuatro.mx/enarm/category/cirugia/"
}
]
}
我试图从“类别”访问“名称”键,但出现未定义错误,因为我使用的是:
var_name = obj_array.terms.category.name
然后我意识到它有方括号,这意味着它在类别键内有一组对象,因为它可以有多个类别对象。因此,为了获得“名称”键,我使用了这个:
var_name = obj_array.terms.category[0].name
这就是诀窍。
也许这个答案为时已晚,但我希望有同样问题的人会像我在找到解决方案之前一样找到这个:)
我遇到过同样的问题。我的解决方案是使用字符串化的输出作为解析 JSON 的输入。这对我有用。希望对你有用
var x =JSON.parse(JSON.stringify(obj));
console.log(x.property_actually_now_defined);
您尝试访问的属性可能还不存在。Console.log 之所以有效,是因为它会在一小段延迟后执行,但对于您的其余代码,情况并非如此。试试这个:
var a = config.col_id_3; //undefined
setTimeout(function()
{
var a = config.col_id_3; //voila!
}, 100);