【问题标题】:Array has records but showing array length 0 in console [duplicate]数组有记录,但在控制台中显示数组长度 0 [重复]
【发布时间】:2018-11-14 18:44:49
【问题描述】:

我的代码中有文件数组。当我添加新文件时,它显示的数组长度不正确。但是,如果我用 settimeout 检查长度,它会显示正确的长度。

console.log('row.myDocuments: ', row.myDocuments);  
console.log('length: ', row.myDocuments.length);

像这样在控制台中获取结果,

每次添加新文件时,进入控制台的长度都是(实际长度-1)

【问题讨论】:

标签: arrays angular console


【解决方案1】:

这与 Chrome 开发工具有关。你看到“[]”旁边蓝色方块中的小“i”了吗?如果你用鼠标悬停它,它会说“下面的值刚刚被评估”。这意味着在您记录您的数组(实际上是一个 javascript 对象)时,它是空的,但后来 Chrome 检测到了更改,并在控制台中更新了该数组。

(只有当你使用小箭头展开它时,你才能看到数组在记录时是空的,因为它看起来像这样“[]”,否则它看起来像这样“[{ ...}]")。

Chrome 会在您记录对象时更新对象,但不会更新简单值。 Array.length 是一个数字,所以当你记录它时,它会给你它的值(0),如果 Array.length 以后发生变化,它不会更新控制台;但如果您在更改后记录它(与您的超时一样),它将记录更新的值。

【讨论】:

  • 谢谢亚历克斯...但是是否有任何替代设置超时。实际上,我期望没有设置超时的实际值。
  • 您需要控制台中的实际值吗?在代码中,它始终是正确的值,如果数组为空,则其长度始终为 0。您可以做的是记录数组的副本,以便记录的数组及其长度匹配。所以将console.log(myArray) 改为console.log(myArray.slice())。另一种选择是在 chrome devtools 的“Sources”部分添加一个断点,它会在变量名旁边显示最新的值。
猜你喜欢
  • 1970-01-01
  • 2023-03-22
  • 2020-07-23
  • 2020-11-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-04-18
相关资源
最近更新 更多