我正在尝试调用数组中唯一的对象,但这总是返回undefined。如果我记录整个数组我可以看到它的一切,如果我调用它的对象它返回undefined!
代码:
var pos = [];
this code is inside a function____
if (navigator.geolocation) {
navigator.geolocation.getCurrentPosition(function(position) {
pos.latlng = {
lat: position.coords.latitude,
lng: position.coords.longitude
};
console.log(position.coords.latitude);
});
}
console.log(pos.latlng); <--- undefined
console.log(pos); <--- works fine
console.log(pos[0].latlng); <--- also tried this
console.log(pos);
的结果Object
latlng : Object
lat : 52.136624499999996
lng : 5.3469106
__proto__:Object
__proto__:Object
答案 0 :(得分:2)
我建议将新对象推送到pos
。
pos.push({
lat: position.coords.latitude,
lng: position.coords.longitude
});
访问
pos[0].lat
答案 1 :(得分:0)
这里的问题是getCurrentPosition是异步的。作为参数提供的函数(也称为回调函数)在获取当前位置之前不会被调用。
我不知道你在这里使用什么来获取当前位置,但是你需要确保在调用回调之前不要使用结果。
答案 2 :(得分:0)
这是因为您首先将pos定义为数组,然后将其视为匿名对象。将其作为数组或匿名对象。
如果你想拥有latlan属性,那么在代码的开头定义pos如下:
pos = {};
否则,您无法获得阵列的属性。所以你需要删除它并将0索引作为lon,将第一个索引作为纬度:
pos = [];
pos.push(position.coords.longitude); // pos[0];
pos.push(position.coords.latitude); // pos[1];
答案 3 :(得分:0)
基于@ibrahim-mahrir所说的内容。
你可以承诺重新获得你的职位:
var pos = {};
this code is inside a function____
getPos(){
return new Promise(function(resolve){
if (navigator.geolocation) {
navigator.geolocation.getCurrentPosition(function(position) {
resolve({
lat: position.coords.latitude,
lng: position.coords.longitude
});
});
});
}
getPos().then(function(pos){
console.log(pos.lat);
console.log(pos.lng);
})
答案 4 :(得分:0)
pos
应该是一个对象(但这不是错误的来源)。
错误可能是由于函数getCurrentPosition
的异步引起的。如果它以异步方式工作,那么日志记录将在值被分配给pos
之前发生。您应该在getCurrentPosition
的回调中进行日志记录,或者在函数内部进行日志记录并从回调内部调用它。
var pos = {}; // object
if (navigator.geolocation) {
navigator.geolocation.getCurrentPosition(function(position) {
pos.latlng = {
lat: position.coords.latitude,
lng: position.coords.longitude
};
// SOLUTION ONE: use pos here
console.log(pos);
console.log(pos.lating);
// SOLUTION TWO: call a function that do the logging
logPos();
});
}
function logPos() { // will be called after the value is assigned
console.log(pos);
console.log(pos.lating);
}
答案 5 :(得分:0)
实际上一个数组是一个对象,除了它的属性是0到2³² - 2和length属性之间的数字,所以是的,你可以这样做:
var pos = [];
pos.inneObject= {//object
prop: 'property'
};
pos.innerObject将存在。但是如果你尝试console.log(pos)
,你会得到'[]',但如果你这样做
for (properties in pos){
console.log(pos[properties])// you will get pos.innerObject
}
因此,您的问题是别的!在这里您可以在创建属性之前记录该属性,在navigator.geolocation.getCurrentPosition
的回调中移动您的console.log,如下所示:
var pos = [];
this code is inside a function____
if (navigator.geolocation) {
navigator.geolocation.getCurrentPosition(function(position) {
pos.latlng = {
lat: position.coords.latitude,
lng: position.coords.longitude
};
console.log(position.coords.latitude);
console.log(pos.latlng); <--- undefined
console.log(pos); <--- works fine
console.log(pos[0].latlng); <--- also tried this
});
}
应该有用;