2017-08-10 141 views
-1

我控制台登录铬他们,他们似乎是这样的:在控制台打开时,他们这两个数组有什么区别?

(A) [] 

(B) (3) [{…}, {…}, {…}] 

这些阵列的内部是相同的。不同的是,我硬编码在对于B的值并试图访问元素数组A时在空(arrayA = [];)使用

arrayA.push({ 
    ... 
}); 

为阵列A.因此,arrayA[0]它返回未定义,相比arrayB[0]它返回预期值。

编辑:这里是一个JSFiddle

+0

https://stackoverflow.com/questions/16484838/console-logarray-shows-different-array-contents-than-iterating-the-array-and-d – epascarello

+0

阵列A为空。数组B是三个对象的列表,每个对象都包含您用这些省略号省略的任何内容。我无法解释在将某物推到它上面后,如何清空一个空阵列;你需要显示你的实际代码。 [mcve] –

+0

@DanielBeck这是一个[JSFiddle](https://jsfiddle.net/0u6zorau/2/) – fdsfdsgf

回答

0

你拨弄显示的问题是什么:异步代码。您正在进行ajax调用,并在调用返回后将数据推送到数组上。您的console.log数组发生在ajax调用返回之前,因此该数组在当时仍为空。

如果你console.log回调中的数据,你会看到实际的数据。高度简化的例子:

var a = []; 
$.getJSON('http://example.com', function(data) { 
    a.push(data); 
    console.log(a); // now a contains data 
}); 
console.log(a); // a is still empty, because the getJSON hasn't returned yet