1

我以为我理解默认操作数在 JavaScript 中是如何工作的,但显然不是。我试图首先确定用户的地理位置,并加载以这些坐标为中心的地图。如果设备无法确定这些坐标,它将回退到仅使用一些默认值加载地图。

您会注意到,在我的错误方法中,我gMap.init()没有参数调用,我认为这应该意味着变量应该分别设置为 57.700992 和 11.893836 latlon相反,我得到Uncaught TypeError: Cannot read property 'coords' of undefined. 我哪里错了?

另外,如果存在,theApp.init()我正在调用地图。navigator.geolocation这是否意味着不支持 HTML5 地理定位的浏览器甚至不会尝试加载地图?

var gMap = {
    init: function (position) {

            var lat = position.coords.latitude || 57.700992,
                lon = position.coords.longitude || 11.893836,
                geocoder =  new google.maps.Geocoder(),
                mapOptions = {
                    zoom: 12,
                    center: new google.maps.LatLng(lat, lon)
                },
                map = new google.maps.Map(document.getElementById('mapcanvas'), mapOptions);

    },
    error: function () {
        console.log('failed to retrieve geoposition');
        gMap.init();
    }
}


var theApp = {
    init: function () {

        if (navigator.geolocation) {
            navigator.geolocation.getCurrentPosition(gMap.init, gMap.error, {timeout:10000});
        }

    }
}
4

2 回答 2

1

||你在那里应该工作,除非 position.coords未定义position。在这种情况下,JavaScript 会抛出错误,因为您正试图访问未定义对象的属性。
您必须手动检查对象是否存在:

var lat, lon;
if(position && position.coords){
    lat = position.coords.latitude || 57.700992;
    lon = position.coords.longitude || 11.893836;
}

如果position未定义,if则将中止,而不尝试检查position.coords.
&&如果左边的参数为假,则不评估右边的参数)

是的,如果navigator.geolocation未定义,则不会加载地图:

navigator.geolocation.getCurrentPosition(gMap.init, gMap.error, {timeout:10000});

这个 ^ 不会被执行,所以gMap.init不会被执行。

于 2012-11-30T10:28:10.837 回答
-1

你应该试试

 var lat = position.coords.latitude ? window['position'] != undefined : 57.700992,
 lon = position.coords.longitude ? window['position'] != undefined : 11.893836,

代替||

于 2012-11-30T10:29:47.360 回答