我从服务器获取JSON响应并创建Javascript对象。结构如下:
var response = {
key1:[],
key2:[],
key3:[],
key4:[],
key5:[]
}
请求完成后,response
对象成功完成,如下所示:
Object (*expandable):
key1: Array[0]
key2: Array[0]
key3: Array[0]
key4: Array[20]
key5: Array[113]
现在稍后,我想将信息存储到数据库中。我已经创建了一个函数,我console.log
响应对象,以确保它没问题(这里它变得有趣 - 请参阅注释):
function setupDatabase(){
console.log(response); // prints the response correctly (see response above)
console.log(response.key5); //prints key5: Array[0]. If I expand the Array[0] all the elements are inside.
console.log("key5: "+response.key5.length);//prints 0!!
}
前3个键为0是正常的,因为没有为它们返回任何元素。剩下的2个还可以。为什么我得到这个日志,而我在一行中的同一个对象上运行3 console.log
个命令?我错过了什么吗?
答案 0 :(得分:7)
这是console.log
如何在某些浏览器上运行的问题。您可以考虑使用console.log(JSON.stringify(response.key5))
来获取时间点视图。
基本上,console.log
会记录某些内容的最高级别,但如果您展开其中一项稍后,它会向您显示内容,因为它们在展开时是 ,而不是在您登录时。因此,response.key5
在您记录时为空,但在您在控制台中展开之前已将其添加到其中。
这种行为非常松懈。例如,在Chrome上,当console.log
发生时,您是否打开或关闭控制台可能很重要。如果你关闭了控制台,它会记录一个你无法扩展的静态内容。
这是一个展示问题的简单示例。
在Chrome中:
您会看到该数组,如果您展开该数组,您会看到在<{strong> console.log
行之后添加的条目。
var a = [];
console.log(a);
a.push("Hi there");
与console.log(JSON.stringify(...))
对比:
var a = [];
console.log(JSON.stringify(a));
a.push("Hi there");
console.dir
执行与console.log
类似的操作,但始终记录“实时”版本,即使控制台已关闭:
var a = [];
console.dir(a);
a.push("Hi there");
当您关闭控制台后,稍后再打开它,console.dir
会显示Array[1]
一个扩展箭头,然后会显示该条目。但奇怪的是,如果您有控制台打开,您会看到Array[0]
- 但随后展开它会显示条目:
这种类是有意义的,因为当你记录它时数组是空的,但是当你展开它时你会看到它的内容。