깊은 복사로 console을 해결합니다.log의 중 대상 디버깅 문제

1413 단어 console
깊은 복사로 console을 해결합니다.log의 중 대상 디버깅 문제
var obj={aa:1} console.log(obj); obj.aa=2 console.log(obj);
위 코드를 실행합니다.콘솔을 뛰어넘기 위해.log의 비동기적 특성은 상기 코드를 한 마디 한 마디 컨트롤러에서 실행합니다. 이렇게 하면 비동기적이거나 다중 루틴의 문제를 무시할 수 있습니다.
그리고 결과를 관찰한 결과 두 개의 Object가 출력된 것을 발견했다.마우스를 눌렀을 때 대상의 내용을 볼 수 있지만 두 Object의 내용이 같다는 것을 알 수 있다.즉, 이런 상황에서 언제 출력된obj든 켜진 후에 보이는 것은 마지막obj의 값이지 출력할 때의 대상의 값이 아니다.consolelog은 한 대상의 인용만 출력하기 때문일 수 있습니다. 마우스를 눌렀을 때 메모리에서 이 인용을 찾습니다. 당연히 마지막 값을 찾습니다.이때 실시간 디버깅이 필요하다면 대상의 깊은 복사가 필요하다.원리는 간단하다.
 var object_copy=function(obj){
            var cache={}
            for(var i in obj){
                if(typeof(obj[i])=="object"){
                    cache[i]=object_copy(obj[i])
                }else{
                    cache[i]=obj[i]
                }
            }
            return cache;
        }

여기에 귀속 작업이 있습니다. 만약 페이지에 이런 디버깅이 대량으로 있다면 메모리가 넘치거나 창고가 넘칠 수 있으니 조심하십시오.
출처: http://www.html-js.com/?p=1333
console.log 비동기성 사례:
var ret = [1, 2, 3, 4, 5, 3, 2, 5, 7, 8], length = ret.length, middle = length/2, n, r; console.log(ret);//[1, 2, 3, 4, 5, 7, 8, undefined × 3] for ( n = middle; n < ret.length; n++ ) { for ( r = 0; r < middle; r++ ) { if ( ret[r] === ret[n] ) { ret.splice(n--, 1); break; } } } console.log(ret);//[1, 2, 3, 4, 5, 7, 8]

좋은 웹페이지 즐겨찾기