Javascript数组元素未定义,它确实不是

时间:2014-07-25 21:26:43

标签: javascript google-maps

有人可以向我解释这个。下图描绘了Chrome控制台中的输出。当我注销主对象时,控制台会显示所有属性。正如您所看到的,数组有一个名为" markers"的属性,它没有未定义,因为我可以浏览它。但是当我尝试注销这个属性时,让我们说object.markers,它说该属性是未定义的。现在我真的很困惑,因为你可以看到我按顺序记录它们。

第一个对象是directionsRenderer。第二个目标是' j' directionsRenderer的财产。第三是标记' directionsRenderer' j'属性。

enter image description here

这是来源 enter image description here

1 个答案:

答案 0 :(得分:3)

我打赌我们在这里看到的是控制台在Chrome中运行的惊人方式。

在Chrome中,当你" log"一个对象,你不会像记录它时那样得到对象。您可以与该对象进行实时交互。第一次展开该对象时,您会看到在展开时的属性列表,而不是记录它时的属性。

我怀疑你是否

console.log(JSON.stringify(directionsRenderer));

...您会发现.j.markers确实未定义,因为在您显示的代码已经运行之后,它已被异步填充。

如果您这样做,可以看到此效果:Live Copy

var a = {b: {}};
console.log(a); // Note that b is currently empty
setTimeout(function() {
    a.b.c = "foo";
    var p = document.createElement('p');
    p.innerHTML = "Now expand <code>a.b</code> in the console";
    document.body.appendChild(p);
});

请注意,我们会在a为空时记录a.b,然后 后记录,我们会向b添加一个属性。在控制台中展开a后,您会看到b c属性

例如,你所拥有的是一个计时问题。涉及到一些异步调用,您需要先找到与之关联的回调,然后才能访问directionsRenderer.j.markers