Javascript 数组长度为 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 行。

在此处输入图片说明

问题:为什么它显示长度为0,尽管它在一行之前明确说它的长度为42?

昆汀

console.log 不同步

您的console.log语句出现在您调用之后getTrips但在getTrips回调触发之前

实际上,您正在尝试从异步调用返回响应

response是一个对象JS 中的对象总是被引用。您正在记录该引用,然后在getTrips回调触发时使用新值(和新长度)更新对象新对象反映在控制台中。

response.length是一个数字。你正在记录它。数值不是参考。这是0因为当时你就叫console.log0当值改变时显示不会更新,因为它是一个数字而不是一个对象。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章