Chrome의 JavaScript 콘솔 동작: 느리게 객체 평가
객체를 평가할 때 Chrome JavaScript 콘솔의 동작이 잠재적으로 예상치 못한 것으로 관찰되었습니다. 이를 설명하기 위해 다음 코드를 고려하십시오.
var s = ["hi"]; console.log(s); s[0] = "bye"; console.log(s);
Firefox에서 콘솔 출력은 다음과 같습니다.
[ "hi" ] [ "bye" ]
그러나 Chrome 버전 7.0.517.41 베타에서는 출력은 다음과 같습니다.
[ "bye" ] [ "bye" ]
예상치 못한 평가 동작
이 동작은 Chrome 콘솔이 개체를 평가할 때 "게으른" 상태일 수 있음을 나타냅니다. 첫 번째 console.log 문이 실행되면 콘솔은 메모리의 개체를 참조합니다. 첫 번째 요소를 "hi"에서 "bye"로 변경하는 등 객체에 대한 후속 수정 사항은 첫 번째 console.log 문의 출력에 반영되지 않습니다. 이는 콘솔이 첫 번째 console.log 문 시점에서만 객체를 평가하고 스냅샷을 저장한다는 것을 의미합니다.
버그 설명
이 동작은 다음 Webkit 버그 보고서: https://bugs.webkit.org/show_bug.cgi?id=35801 (현재 수정됨). 이 버그는 Chrome 콘솔이 직접 액세스되는 개체에 대해 지연 평가를 수행하지 않아 관찰된 동작이 발생한다고 명시합니다.
해결 방법
이러한 예기치 않은 동작을 방지하려면 다음 중 하나를 수행하세요. console.log에 전달하기 전에 객체에 대해 toString을 호출할 수 있습니다. 이렇게 하면 Chrome에서 후속 변경으로 인해 변경되지 않는 개체의 표현을 생성하여 콘솔 출력에 개체의 현재 상태가 반영되도록 합니다.
var s = ["hi"]; console.log(s.toString()); s[0] = "bye"; console.log(s.toString());
출력:
hi bye
위 내용은 Chrome의 JavaScript 콘솔이 객체를 평가할 때 예기치 않은 결과를 표시하는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!