2017-08-10 274 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