我有一个数组,其中有两个对象,分配给 $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/