2014-07-25 2 views
1

이 아닙니다. 아래 이미지는 Chrome 콘솔의 출력을 보여줍니다. 주 개체를 로그 아웃하면 콘솔에 모든 속성이 표시됩니다. 배열을 보면 알 수 있듯이 배열에는 "marker"라는 속성이 있습니다.이 속성은 찾아 볼 수 있으므로 정의되지 않았습니다. 하지만이 속성을 로그 아웃하려고 할 때 object.markers라고 말하면 속성이 정의되지 않았다고 말합니다. 이제는 혼란 스럽습니다. 볼 수 있듯이 순차적으로 기록하기 때문입니다.Javascript 배열 요소는 정의되지 않았습니다. 실제로는

첫 번째 객체는 directionsRenderer입니다. 두 번째 객체는 directionsRenderer의 'j'속성입니다. 세 번째는 directionsRenderer 'j'속성의 '마커'속성입니다.

enter image description here

는 여기에 내가 우리가 여기서보고있는 것은 콘솔이 크롬에서 작동하는 놀라운 방법입니다 내기 소스 enter image description here

+0

.j.markers는 .j.j –

+0

directionsRenderer.j.markers가 정의되지 않은 것과 완전히 동일하기 때문에 재밌습니다. directionsRenderer.j 및 directionsRenderer.markers는 사진의 모습입니다. – geocodezip

+0

directionsRenderer.markers는 정의되지 않았습니다. –

답변

3

입니다.

크롬에서 개체를 "로그"할 때로 기록되었을 때의 개체는 그대로 이 아닙니다. 당신은 그 객체와 실시간 대화를하게됩니다. 처음으로 해당 객체를 확장하면 의 속성 목록이 확장 될 때이 기록 될 때와 달리 표시되지 않습니다.

난 당신이

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

을 할 경우 나중에 비동기 코드 후 실행 한 표시했습니다 채워 있기 때문에 ... 당신이 .j.markers 실제로 정의되지 않은 것을 볼 수 있습니다 생각한다. a.b이 비어있을 때 우리는 a를 기록 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); 
}); 

주 후, 우리는 그것을 기록 후, 우리는 b에 속성을 추가 :이 작업을 수행 할 경우

당신은이 효과를 볼 수 있습니다. 콘솔에서 a을 확장하면 c 속성이 인 b이 표시됩니다.

예를 들어 타이밍 문제입니다. 일부 비동기 호출이 관련되어 있으므로 directionsRenderer.j.markers에 액세스하려면 먼저 콜백을 찾아야합니다.

+1

복제되고 업데이트되었습니다. –

+0

원형 구조이므로 문자열을 사용할 수 없습니다. 그러나 당신의 설명은 논리적으로 보인다. –

+0

도움 주셔서 감사합니다. –

관련 문제