Javascript JS默认操作数
我想我了解JavaScript中默认操作数的工作原理,但显然不了解。我试图首先确定用户的地理位置,然后加载以这些坐标为中心的地图。如果设备无法确定这些坐标,它将退回到只加载带有一些默认值的地图 您会注意到,在我的error方法中,我调用的是没有参数的Javascript JS默认操作数,javascript,google-maps-api-3,Javascript,Google Maps Api 3,我想我了解JavaScript中默认操作数的工作原理,但显然不了解。我试图首先确定用户的地理位置,然后加载以这些坐标为中心的地图。如果设备无法确定这些坐标,它将退回到只加载带有一些默认值的地图 您会注意到,在我的error方法中,我调用的是没有参数的gMap.init(),我认为这意味着变量lat和lon应该分别设置为57.700992和11.893836。相反,我得到的是未捕获的TypeError:无法读取未定义的的属性“coords”。我哪里做错了 另外,如果存在navigator.geol
gMap.init()
,我认为这意味着变量lat
和lon
应该分别设置为57.700992和11.893836。相反,我得到的是未捕获的TypeError:无法读取未定义的的属性“coords”。我哪里做错了
另外,如果存在navigator.geolocation
,则在app.init()中调用map。这是否意味着不支持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});
}
}
}
你在那里的|
应该有效,除非位置。坐标或位置未定义。在这种情况下,JavaScript将抛出错误,因为您试图访问未定义对象上的属性。
您必须手动检查对象是否存在:
var lat, lon;
if(position && position.coords){
lat = position.coords.latitude || 57.700992;
lon = position.coords.longitude || 11.893836;
}
如果position
未定义,则If
将中止,而不尝试检查position.coords
(如果左参数为false,则&&
不会计算右参数)
是的,如果未定义navigator.geolocation
,则不会加载地图:
navigator.geolocation.getCurrentPosition(gMap.init, gMap.error, {timeout:10000});
此^1将不会执行,因此gMap.init
将不会执行。您应该尝试
var lat = position.coords.latitude ? window['position'] != undefined : 57.700992,
lon = position.coords.longitude ? window['position'] != undefined : 11.893836,
假设您谈论的是| |,而不是| |
,它不是“默认操作数”,而是“逻辑或运算符”。您得到的错误与该运算符无关,因为position
是undefined
所以position.coords
是一个错误。请尝试lat=position&&position.coords.latitude | | | | 57.700992
position.coords
position未定义,您无法访问未定义变量的属性。很抱歉,它确实被称为默认操作数。Check and.Defaulting运算符是JavaScript中OR运算符的别名,因为其特殊的行为。它根本不是“操作数”,而是“运算符”。操作数是它所操作的表达式,在您的例子中是position.coords.latitude
和57.700992
。它通常被称为“逻辑OR”运算符,因为在大多数语言中,以及在使用布尔操作数的JS中,它就是这样做的,尽管JavaScript有一种特殊的逻辑OR实现,允许在非布尔型上使用它,这就是为什么在某些情况下可以使用它来帮助设置默认值。ReferenceError:position未定义
这是一个冲动的回答,我的巴迪是这样写的:lat=position&&position.coords.latitude | | | | 57.700992
,但答案仍然很好。谢谢我更喜欢在这里使用if
,因为您只评估位置
/位置。坐标
一次。但这两种方法都有效,而且你的更紧凑。谢谢