javascript - Angular 无法读取数组中的对象

标签 javascript arrays angularjs object

我有一个数组,其中有两个对象,分配给 $scope.items;

当我这样做

console.log($scope.items) 

输出是:

[
 {s: "item1", q: 3, $$hashKey: "object:3", population: Object},
 {s: "item2", q: 3, $$hashKey: "object:4", population: Object}
]

但是当我这样做时

console.log($scope.items[0]) 

输出(有时*)是:

{s: "item1", q: 3, $$hashKey: "object:3"}

'* 这并不总是发生,取决于页面加载。刷新页面时,结果有时有人口,有时没有人口。

第一个输出始终完整且人口完好无损。 (无论我按多少次 f5 :) )

我同时调用console.log。并且顺序与上面相同。

所以我不明白当我直接调用其中一个对象时它们是不完整的?

看起来像是解析错误,但是第一个输出怎么可能总是完整的?

额外信息 $scope.items 是另一个数组的副本。

我使用 $http.get 来构建对象,但也尝试在他的成功函数中调用 console.logs。

$http.get 被放置在 foreach 中,因此在完整数组完成之前会被多次调用

我使用 http.get 来建立人口。

我希望有人能为我澄清一下,这怎么可能。或如何继续寻找找到错误的可能性。

最佳答案

这不是 Angular 问题,而是谷歌浏览器的功能/问题。在谷歌浏览器中,当您控制台任何对象时,它会显示名称:对象,当您展开它时,它指向实时内存位置,即使该内存位置在console.log之后更新,它也会随着更新的输出而扩展。 p>

var d=[];

for(var i=0;i<100;i++){
    d[i]="val_"+i
}
console.log(d); //d[60] should be val_60 but will get value 'changed value' when you expand
console.log(d[60]); //will print 'val_60'

d[60]='changed value'

这是一个示例代码,您可以在浏览器中运行它,您将在控制台中得到奇怪的结果。

在您的情况下,您正在打印一个数组,谷歌浏览器的控制台将指向该数组的内存位置。并打印该数组,当您尝试扩展该数组时,它将从内存中获取用餐时间信息并显示数组的当前状态。

解决方案是在 Chrome 中使用调试器并在该变量发生更改之前检查该变量。

另一个解决方案是使用 JSON.stringify 将该数组转换为字符串,

关于javascript - Angular 无法读取数组中的对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29009012/

相关文章:

javascript - 如何使用单选按钮切换 Google(和维基百科)搜索框建议?

javascript - 通过 css 删除 div 的用户脚本

java - 不能在 ArrayList 中使用对象的 toString() 方法

angularjs - 在 Controller 中测试命名函数

javascript - Javascript 中的总和格式金额返回 NaN

javascript - 为什么对同一个函数的两个绑定(bind)返回不同的值

c - 如何检查字符串是否包含特定字符?

python - 在 NumPy 中对数组进行排序,在一列上升序,在另一列上降序

javascript - 谷歌地图全高风格angularjs

html - 如何在 Ionic Framework 中更改按钮颜色和文本?