Bri*_*ger 298 javascript console.log
这令我困惑.我不知道怎么解释这个,但这是我的调试代码的样子.在它下面,您可以看到这两个日志的输出.第一个清楚地显示了我正在尝试访问的属性的完整JavaScript对象,但下一行代码我无法使用config.col_id_3访问它(请参阅屏幕截图中的"undefined"?).有谁能解释一下?我也可以访问除field_id_4之外的所有其他属性.
console.log(config);
console.log(config.col_id_3);
Run Code Online (Sandbox Code Playgroud)
这就是这些console.log()在Console中打印的内容

Mat*_*att 263
输出console.log(anObject)是误导性的; 只有>在控制台中展开时,才会解析显示的对象的状态.当你成为对象时,它不是对象的状态console.log.
相反,尝试console.log(Object.keys(config)),甚至console.log(JSON.stringify(config))你会在你调用时看到键或对象的状态console.log.
你会(通常)找到被添加键后您的console.log来电.
ram*_*min 48
我刚刚使用Mongoose从MongoDB加载了一个文档.
在console.log()整个对象上运行时,将显示所有文档字段(存储在数据库中).但是undefined,当其他(包括_id)工作正常时,某些单独的属性访问器将返回.
原来,属性访问器只适用于在我指定的那些字段mongoose.Schema(...)定义,而console.log()并JSON.stringify()返回存储在数据库中的所有领域.
解决方案(如果您使用的是Mongoose):确保定义了所有数据库字段mongoose.Schema(...).
Asa*_*pez 25
检查对象内部是否有一个对象数组.我有一个与JSON类似的问题:
"terms": {
"category": [
{
"ID": 4,
"name": "Cirugia",
"slug": "cirugia",
"description": "",
"taxonomy": "category",
"parent": null,
"count": 68,
"link": "http://distritocuatro.mx/enarm/category/cirugia/"
}
]
}
Run Code Online (Sandbox Code Playgroud)
我试图从'category'访问'name'键,我得到了未定义的错误,因为我使用的是:
var_name = obj_array.terms.category.name
Run Code Online (Sandbox Code Playgroud)
然后我意识到它有方括号,这意味着它在类别键中有一个对象数组,因为它可以有多个类别对象.所以,为了获得'name'键,我使用了这个:
var_name = obj_array.terms.category[0].name
Run Code Online (Sandbox Code Playgroud)
这就是诀窍.
也许这个答案为时已晚,但我希望有同样问题的人会在找到解决方案之前找到这个问题:)
Lai*_*Xue 21
您尝试访问的属性可能尚不存在.Console.log之所以有效,是因为它在一小段延迟后执行,但其余代码则不然.试试这个:
var a = config.col_id_3; //undefined
setTimeout(function()
{
var a = config.col_id_3; //voila!
}, 100);
Run Code Online (Sandbox Code Playgroud)
Top*_*ope 20
我遇到过同样的问题.我的解决方案是使用字符串化输出作为解析JSON的输入.这对我有用.希望它对你有用
var x =JSON.parse(JSON.stringify(obj));
console.log(x.property_actually_now_defined);
Run Code Online (Sandbox Code Playgroud)
我今天在这个问题上挣扎,并且认为我会用我的解决方案回复.
我是通过ajax获取数据对象,如下所示:
{"constants": {"value1":"x","value2":"y"},"i18n" {"data1":"x", "data2":"y"}}
假设这个对象位于一个名为data的变量中.每当我引用data.i18n我的时候undefined.
console.log(data) 显示了预期的对象console.log(Object.keys(data))["constants","i18n"]按预期说什么都没有帮助...然后在服务器端我将数据写入php日志,它显示了这个:
{"constants": {"value1":"x","value2":"y"},"\u045618n" {"data1":"x", "data2":"y"}}
索引键中的"i"实际上是u0456(西里尔文i).这在我的php编辑器或浏览器控制台日志中不可见.只有php日志显示这个...这是一个棘手的...
在我的情况下,我将一个对象传递给一个promise,在promise中我向对象添加了更多的键/值,当它完成时,promise返回了对象.
然而,稍微过一下我的一部分,承诺在返回对象是完全完成之前......因此我的代码的其他地方在设法处理更新对象和数据还没有出现.但是像上面一样,在控制台中,我看到对象已完全更新但无法访问密钥 - 它们未定义.直到我看到这个:
console.log(obj) ;
console.log(obj.newKey1) ;
// returned in console
> Object { origKey1: "blah", origKey2: "blah blah"} [i]
origKey1: "blah"
origKey2: "blah blah"
newKey1: "this info"
newKey2: "that info"
newKey3: " more info"
> *undefined*
Run Code Online (Sandbox Code Playgroud)
[i]是一个小图标,当我在它上面盘旋它说Object value at left was snapshotted when logged, value below was evaluated just now.多数民众赞成在我发现我的对象在承诺完全更新之前被评估的时候.
对我来说,这是一个与猫鼬相关的问题。
我正在循环访问从 Mongo 查询中获得的对象。我只需要删除:
items = await Model.find()
Run Code Online (Sandbox Code Playgroud)
并将其替换为:
items = await Model.find().lean()
Run Code Online (Sandbox Code Playgroud)
我的数据只是json数据字符串.(此变量在会话中存储为json字符串).
console.log(json_string_object)
Run Code Online (Sandbox Code Playgroud)
- >只返回此字符串的表示形式,无论是字符串还是对象,都无法区分.
所以为了使它工作我只需要将它转换回真实对象:
object = JSON.parse(json_string_object);
Run Code Online (Sandbox Code Playgroud)
小智 6
我刚刚在 csv-parser 从 MS Excel 生成的 CSV 文件生成的对象中遇到了这个问题。我能够访问除第一个属性之外的所有属性 - 但如果我使用 console.log 编写整个对象,它会显示正常。
原来,UTF-8 CSV 格式在开头插入了 3 个字节(ef bb bf),对应于一个不可见的字符——它们被 csv-parser 作为第一个属性头的一部分包含在内。解决方案是使用非 UTF 选项重新生成 CSV,这消除了不可见字符。
在2018年,Mozilla在此处的Mozilla文档中警告我们!
我引用“记录对象”:
不要用
console.log(obj);, 用console.log(JSON.parse(JSON.stringify(obj)));。这样,您可以确定在记录obj时会看到它的值。
如果这是在使用Mongoose时发生的问题,则可能会发生以下情况:
console.log(object)
Run Code Online (Sandbox Code Playgroud)
返回所有内容,包括所需的密钥。
console.log(object.key)
Run Code Online (Sandbox Code Playgroud)
返回未定义。
如果发生这种情况,则意味着 Mongoose Schema 中缺少密钥。添加它可以解决问题。