Position
对象无法使用扩展语法
navigator.geolocation.getCurrentPosition((position) => {
console.log(position);
for( var i in position) {
console.log(i + ":" + position[i]);
}
const d = { ...position };
console.log(d);
const { coords } = position;
console.log(coords);
});
在此代码中,d
应该是浅拷贝position
最后,d
是一个空对象。
答案 0 :(得分:0)
Spread语法仅扩展为对象自己的可枚举属性。 Position
的属性是在原型中使用getter定义的,它们不是对象本身的普通属性。
如果您执行console.log(Object.keys(position))
,出于相同的原因,它将显示一个空数组。
for-in
遍历对象的可枚举属性,而不仅限于自己的属性。因此,它包括继承的属性。因此,您必须使用循环来进行浅表复制:
d = {}
for (i in position) {
d[i] = position[i];
}
答案 1 :(得分:0)
首先,认识到getCurrentPosition的默认超时是infinite(!)。这意味着如果getCurrentPosition挂在后端某处,您的错误处理程序将永远不会被调用。
为确保获得超时,请在对getCurrentPosition的调用中添加可选的第三个参数,例如,如果希望用户等待不超过10秒的时间来告诉他们正在发生的事情,请使用:>
navigator.geolocation.getCurrentPosition(successCallback,errorCallback,{timeout:10000});
由于超时原因,可能是您无法获得位置的输出。获得position
数据后,您可以尝试进行以下操作:
navigator.geolocation.getCurrentPosition(function(position) {
console.log(position);
var lat = position.coords.latitude;
var lng = position.coords.longitude;
}, function(error) {
console.log(error);
});
上面的代码正常工作后,您可以将其转换为箭头功能并能够使用您的代码。