Javascript Console.log:数组的长度同时为0和1

Javascript Console.log:数组的长度同时为0和1,javascript,arrays,object,Javascript,Arrays,Object,关于console.log,我相信我有一个与 在我的控制台里 我的密码是24 const lists = this.props.localData.lists; if(lists.length === 0 ) { console.log('lists',lists); } 这是怎么回事 如果它的方式正确,我如何访问列表[0](未定义) 谁能给我一个提示吗 提前感谢。请查看:foo=[]创建一个新数组,并将对该数组的引用分配给一个变量。任何其他引用都不受影响,仍然指向原始数组 foo.l

关于console.log,我相信我有一个与

在我的控制台里

我的密码是24

const lists = this.props.localData.lists;
if(lists.length === 0 ) {
  console.log('lists',lists);
}
这是怎么回事

如果它的方式正确,我如何访问
列表[0]
(未定义)

谁能给我一个提示吗


提前感谢。

请查看:
foo=[]
创建一个新数组,并将对该数组的引用分配给一个变量。任何其他引用都不受影响,仍然指向原始数组

foo.length=0
修改数组本身。如果您通过不同的变量访问它,那么仍然会得到修改后的数组。
幸运的是。

这里的一些评论暗示了这个问题,但我没有看到一个完整和正确的解释。下面是发生的事情

数组的初始单行显示是在调用
console.log()
时创建的。简单地查看日志不会改变任何事情(与一两条评论相反)。对阵列的后续更新也不会更改此单线视图

但是,当单击小三角形展开日志条目时,展开的多行显示将使用单击三角形时的当前数组内容创建。这就是造成两者差异的原因。调用
console.log()
时,您的数组是空的,在此之后但在单击展开控制台中的显示之前,您向数组中添加了一个元素

如果希望在调用
console.log()
时获得数组的完整视图,一个好方法是使用
JSON.stringify()
。可以使用此函数的第三个参数漂亮地打印结果。因此,在您的示例中,您可以使用:

console.log( JSON.stringify( lists, null, 4 ) );

请看。console对象依赖于实现,不一定一致。您的第一个元素从索引zerorule#1开始-控制台位于-将鼠标悬停在蓝色的
i
上。好吧,链接问题的答案在这里也可能有效。因此,您需要检查console.log调用之后的代码,并查看元素是否添加到那里。您可以为此使用调试器。在记录数组时,它的长度为0,但在查看日志时,它的长度为1。谢谢Michael,在本例中,
调试器
是更好的选择吗?