簡體   English   中英

JavaScript數組長度為0

[英]Javascript array length of 0

我得到以下一些奇怪的行為,即使在打印之前,它仍然顯示數組長度為0,盡管它顯然表明長度大於0:

var getTopSelection = function(callback) {
    var topSelection = [];
    for(var i=0; i < markers.length; i++) {
        if(markers[i].map !== null) {
            var stationID = markers[i].id;
            getTrips(stationID, globalFromDate, globalToDate, function(response) {
                topSelection.push({
                    StationID: stationID,
                    Trips: response
                });
            }, function(error) {
                console.log(error);
            })
        }
    }
    callback(topSelection);
};

getTopSelection(function(response) {
            console.log(response); //115
            console.log(response.length); //116
})

並且這在檢查器中顯示,“長度:42”屬於第115行。

在此處輸入圖片說明

問題:為什么即使清楚地指出前一行有42個長度,也顯示0長度?

console.log 不是同步的

console.log語句出現在調用后getTrips但之前getTrips回調已經解雇。

實際上,您正在嘗試從異步調用返回響應

response是一個對象 始終引用JS中的對象。 您正在記錄該引用,然后在getTrips回調時使用新值(和新長度)更新對象。 新對象將反映在控制台中。

response.length是一個數字。 您正在記錄它。 數字值不是參考。 它是0因為您調用console.log它是0 當值更改為數字而不是對象時,顯示不會更新。

因此,實際上發生的是,當您記錄響應時,它的長度實際上為0。但是在返回異步響應后,它有42個項目,但是length作為一個屬性記錄為數字。 但是您作為對象的響應最初記錄為零項。 但在接收到實際響應當參考到響應對象被更新,並看到該響應由具有42項和長度也低於代碼42.是針對該給后示出了示例setTimeout稱為記錄響應在控制台中更新。

 var getTopSelection = function(callback) { var topSelection = []; markers=[1,2,3,4,5,6,7,8,9]; for(var i=0; i < markers.length; i++) { if(markers[i].map !== null) { var stationID = markers[i].id; getTrips(stationID, function(response) { topSelection.push({ StationID: i, Trips: response }); }, function(error) { console.log(error); }) } } callback(topSelection); }; function getTrips(station,fun){ setTimeout(function(){ fun(["trip1","trip2","trip3"]); },1000) } getTopSelection(function(response) { console.log(response); //115 console.log(response.length); //116 }) 

嘗試在此處小提琴中執行此代碼段(經過相應修改以顯示實際發生的情況)。 並在控制台中觀察輸出,因為stackoverflow片段中的結果將不可見。 這是控制台輸出的快照

在此處輸入圖片說明

希望能幫助到你 :)

數組長度返回0

似乎您正在嘗試查找對象的長度,而不是實際的數組。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM