[英]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長度?
因此,實際上發生的是,當您記錄響應時,它的長度實際上為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片段中的結果將不可見。 這是控制台輸出的快照
希望能幫助到你 :)
似乎您正在嘗試查找對象的長度,而不是實際的數組。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.