JS默认操作数

时间:2012-11-30 10:23:37

标签: javascript google-maps-api-3

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

你会注意到在我的错误方法中,我正在调用没有参数的gMap.init(),我认为这应该意味着变量latlon应设置为57.700992和11.893836分别。相反,我得到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});
        }

    }
}

2 个答案:

答案 0 :(得分:1)

除非 ||position.coords未定义,否则position应该有效,除非 var lat, lon; if(position && position.coords){ lat = position.coords.latitude || 57.700992; lon = position.coords.longitude || 11.893836; } position。在这种情况下,JavaScript会抛出错误,因为您尝试访问未定义对象上的属性 您必须手动检查对象是否存在:

if

如果position.coords未定义,则&&将中止,而不会尝试检查navigator.geolocation
(如果左边的参数为假,navigator.geolocation.getCurrentPosition(gMap.init, gMap.error, {timeout:10000}); 不会评估正确的参数。

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

{{1}}

此^将不会被执行,因此{{1}}将不会被执行。

答案 1 :(得分:-1)

你应该试试

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

而不是||