我以为我理解了默认操作数在JavaScript中是如何工作的,但显然不是。我正在尝试首先确定用户的地理位置,然后加载以这些坐标为中心的地图。如果设备无法确定这些坐标,则会回退到仅使用某些默认值加载地图。
你会注意到在我的错误方法中,我正在调用没有参数的gMap.init()
,我认为这应该意味着变量lat
和lon
应设置为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});
}
}
}
答案 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,
而不是||