下面,您可以看到这两个日志的输出。第一行代码清楚地显示了我试图访问的属性的完整对象,但在下一行代码中,我无法使用配置访问它。Col_id_3(见截图中的“undefined”?)有人能解释一下吗?我也可以访问除field_id_4之外的所有其他属性。

console.log(config);
console.log(config.col_id_3);

这就是这些行在控制台中打印的内容


当前回答

好吧,我经过了一个让我对新循环感到害怕的情况,感谢我的老派。

forEach循环和for(a in obj)循环都会产生错误的信息和错误,这取决于对象的类型和属性!!

老的好

for(var i=0, max=arr.length; i<max; i++)
{ //Properties available correctly!

   arr[i].property        //both work inside old school loop!
   arr[i][property]  
}             

其他回答

我的数据只是json数据字符串。(这个变量在会话中存储为json字符串)。

console.log(json_string_object)

->只返回该字符串的表示形式,无法区分是string还是object。

所以为了让它工作,我只需要把它转换回真实对象:

object = JSON.parse(json_string_object);

如果你使用的是TYPESCRIPT和/或ANGULAR,它可能是这样的!

.then((res: any) => res.json())

设置响应类型为任何为我修复了这个问题,我无法访问响应上的属性,直到我设置res: any

属性“_body”在类型“Response”上不存在

我今天也遇到了同样的问题。在我的例子中,键是嵌套的,即key1.key2。 我使用split()分割键,然后使用方括号符号,这对我来说很有效。

var data = {
    key1: {
          key2: "some value"
       }
}

我把键分开并像这样使用它,data[key1][key2]为我做了这项工作。

我也有类似的问题,希望下面的解决方案能帮助到别人。 你可以使用setTimeout函数,但你永远不知道你的浏览器需要多长时间来定义你的对象。

除此之外,我建议使用setInterval函数。它将等待您的对象配置。Col_id_3被定义,然后触发需要特定对象属性的下一个代码部分。

window.addEventListener('load', function(){

    var fileInterval = setInterval(function() {
        if (typeof config.col_id_3 !== 'undefined') {

            // do your stuff here

            clearInterval(fileInterval); // clear interval
        }
    }, 100); // check every 100ms

});

检查对象内部是否有一个对象数组。我有一个类似的问题与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

然后我意识到它有方括号,这意味着它在category键中有一个对象数组,因为它可以有多个category对象。因此,为了获得'name'键,我使用了这个:

var_name = obj_array.terms.category[0].name

这就成功了。

也许现在回答这个问题已经太晚了,但我希望有同样问题的人能像我一样在找到解决方案之前找到这个答案:)