繁体   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