[javascript] console.log에 객체의 현재 상태를 표시하려면 어떻게해야합니까?

애드온 (및 대부분의 다른 브라우저)이없는 Safari에서는 호출 된 console.log상태가 아니라 마지막 실행 상태에서 객체를 표시합니다 console.log.

console.log해당 줄에서 객체의 상태를 얻으려면 출력하기 위해 객체를 복제해야합니다 .

예:

var test = {a: true}
console.log(test); // {a: false}
test.a = false;
console.log(test); // {a: false}



답변

찾고 계신 것 같습니다 console.dir().

console.log()객체에 대한 참조를 인쇄하기 때문에 원하는 것을 수행하지 않으며 열 때마다 변경됩니다. console.dir객체를 호출 할 때 객체의 속성 디렉토리를 인쇄합니다.

아래 JSON 아이디어는 좋은 아이디어입니다. JSON 문자열을 구문 분석하고 .dir ()이 제공하는 것과 같은 탐색 가능한 객체를 얻을 수도 있습니다.

console.log(JSON.parse(JSON.stringify(obj)));


답변

기록 당시의 상태를보고 싶을 때 일반적으로하는 것은 JSON 문자열로 변환하는 것입니다.

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


답변

바닐라 JS :

@evan의 대답 은 여기에 가장 좋습니다. JSON.parse / stringify를 사용하여 객체의 복사본을 효과적으로 만듭니다.

console.log(JSON.parse(JSON.stringify(test)));

JQuery 전용 솔루션 :

특정 시점에 객체의 스냅 샷을 만들 수 있습니다. jQuery.extend

console.log($.extend({}, test));

실제로 여기서 발생하는 것은 jQuery가 test객체의 내용 으로 새 객체를 생성 하고 로깅하는 것이므로 변경되지 않습니다.

AngularJS (1) 특정 솔루션 :

Angular는 copy동일한 효과에 사용할 수 있는 기능을 제공합니다 .angular.copy

console.log(angular.copy(test));

바닐라 JS 래퍼 기능 :

다음은 랩핑 console.log하지만 로그 아웃하기 전에 객체를 복사 하는 함수입니다 .

나는 대답에서 비슷하지만 덜 강력한 기능에 대한 응답으로 이것을 썼습니다. 그것은 여러 인수를 지원하고, 것입니다 하지 그렇지 않은 경우 일을 복사하려고 일반 객체.

function consoleLogWithObjectCopy () {
  var args = [].slice.call(arguments);
  var argsWithObjectCopies = args.map(copyIfRegularObject)
  return console.log.apply(console, argsWithObjectCopies)
}

function copyIfRegularObject (o) {
  const isRegularObject = typeof o === 'object' && !(o instanceof RegExp)
  return isRegularObject ? copyObject(o) : o
}

function copyObject (o) {
  return JSON.parse(JSON.stringify(o))
}

사용법 예 :consoleLogWithObjectCopy('obj', {foo: 'bar'}, 1, /abc/, {a: 1})


답변

그것은 > Object콘솔에서 만 현재 상태를 표시되지 않습니다. 실제로 객체 읽기를 지연시키고 있으며 확장 할 때까지 속성입니다.

예를 들어

var test = {a: true}
console.log(test);
setTimeout(function () {
    test.a = false;
    console.log(test);
}, 4000);

그런 다음 첫 번째 통화를 확장하면 두 번째 통화가 끝나기 전에 전화를 걸면 정확 console.log합니다.


답변

Xeon06의 힌트를 사용하여 객체에서 JSON을 구문 분석 할 수 있으며 다음은 객체를 덤프하는 데 사용하는 로그 함수입니다.

function odump(o){
   console.log($.parseJSON(JSON.stringify(o)));
}


답변

유틸리티를 정의했습니다.

function MyLog(text) {
    console.log(JSON.stringify(text));
}

콘솔에 로그온하고 싶을 때 간단하게 수행합니다.

MyLog("hello console!");

잘 작동합니다!


답변

사람이 읽을 수있는 방식으로 객체를 기록 할 수 있습니다.

console.log(JSON.stringify(myObject, null, 2));

각 레벨에서 2 개의 공백이있는 오브젝트를 들여 쓰기합니다.

JavaScript를 사용하여 JSON을 예쁘게 인쇄하려면 어떻게해야합니까?