JavaScript 객체를 표시하려면 어떻게해야합니까?


1616

alert변수 와 같이 JavaScript 객체의 내용을 문자열 형식으로 표시하려면 어떻게합니까 ?

객체를 표시하려는 것과 동일한 형식의 방법입니다.


7
질문을 다시 말씀해 주시겠습니까? "포맷 방식"이란 무엇입니까? 마찬가지로 굵게 / 이탈리아 / 등과 같은 풍부한 서식을 사용합니까?
Sasha Chedygov

콘솔 명령을 사용하여 변수 값을 인쇄하여 변수의 런타임 값을 표시하는 방법이 있습니까?
BlackPanther

1
@BlackPanther 그냥하세요 console.log("", yourObject1, yourObject2, yourObject3, etc...);. 더 짧은 버전은 그냥하는 것 console.log(yourObject1, yourObject2, etc...);입니다.
tom_mai78101

2
커뮤니티 합의를보다 정확하게 반영하는 더 나은 답변을 선택할 수 있습니까?
HoldOffHunger

이처럼console.log('a string', aNumber, anObject)
onmyway133

답변:


1068

디버깅 목적으로 객체를 인쇄하려면 다음 코드를 사용하십시오.

var obj = {prop1: 'prop1Value', prop2: 'prop2Value', child: {childProp1: 'childProp1Value'}}
console.log(obj)

표시됩니다 :

스크린 샷 콘솔 크롬

참고 : 개체 기록 해야 합니다. 예를 들어, 작동하지 않습니다.

console.log('My object : ' + obj)

참고 ' : log메소드에 쉼표를 사용할 수도 있습니다. 그러면 출력의 첫 번째 행이 문자열이되고 그 후에 오브젝트가 렌더링됩니다.

console.log('My object: ', obj);

43
이 기능은 JavaScript 콘솔 (Chrome 버전에 따라 Shift + Control + J 또는 Shift + Control + I)을 사용할 때 Chrome에서도 작동합니다. 또한 console.log(obj1, obj2)매우 훌륭하게 작동하므로 console.log()여러 변수를 로깅 할 때 모든 객체 를 호출 할 필요가 없습니다 . 또한 프로덕션에서 이러한 호출을 모두 제거해야합니다 (Internet Explorer 등).
Felix

102
예. [object Object]를 인쇄하지만 그 옆에 작은 expando-toggly 버튼이있어 객체의 내용을 검사 할 수 있습니다.
hughes

12
@ hughes 실제로 둘 다 할 수 있습니다. 내가 만든 객체가 있습니다 : var obj = { "foo": false}; 서버에서 콜백으로 전달되는 다른 객체는 콜백을 통해 전달 된 객체가 작은 화살표로 인쇄하므로 열 수 있습니다. 정적으로 생성 된 객체는 화살표없이 [object Object]를 인쇄합니다. 나는 다른 생각도 이것을 알아 내려고 노력하고 있습니까?
benstraw

124
console.log("id:"+obj);문자열을 출력 할 때 올바르게 출력되지 않습니다. 다음과 같이 지정해야합니다.console.log("id:"); console.log(obj);
Anriëtte Myburgh

14
시도 console.log(JSON.stringify(obj))또는console.dir(obj)
로봇 소년

2011

기본 JSON.stringify방법을 사용하십시오 . 중첩 객체와 함께 작동하며 모든 주요 브라우저 가이 방법을 지원 합니다.

str = JSON.stringify(obj);
str = JSON.stringify(obj, null, 4); // (Optional) beautiful indented output.
console.log(str); // Logs output to dev tools console.
alert(str); // Displays output using window.alert()

링크 모질라 API 참조 및 다른 예.

obj = JSON.parse(str); // Reverses above operation (Just in case if needed.)

이 Javascript 오류가 발생하면 사용자 정의 JSON.stringify 대체기를 사용하십시오.

"Uncaught TypeError: Converting circular structure to JSON"

326
더 읽기 쉬운 출력을 얻으려면 JSON.stringify (obj, null, 4)를 시도하십시오. 깔끔하게 들여 쓰기 된 텍스트로 작성합니다.
Ben Clayton

2
JSON.stringify는 작은 자바 스크립트 값 하위 집합 만 표시 할 수 있으며 나머지 부분에는 예외가 발생합니다. console.log에는이 문제가 없습니다.
Monica 기억

11
당신이 나와 같은 초보자라면, 잊지 마세요console.logconsole.log(JSON.stringify(obj,null, 4));
nilesh

2
ob = window 인 경우 "Catch되지 않은 TypeError : 순환 구조를 JSON으로 변환"
Michael

1
나는 그것이 효과가없는 경우가있었습니다 : {}비어 있지 않은 물건을 보여주었습니다 . 따라서 반환 console.log(obj)할 때 객체가 비어 있다고 생각하기 전에 확인하십시오 . strigify(){}
Sindarus

394
var output = '';
for (var property in object) {
  output += property + ': ' + object[property]+'; ';
}
alert(output);

1
이것이 바로 내가 원하는 것입니다. Google지도 v3을 사용하고 있으며 directionrenderer가 객체를 반환합니다. 여기에는 4 개의 항목이 있으며 그 중 하나의 개체 이름이 계속 변경되므로이를 찾아야합니다. 이를 위해이 방법이 실제로 도움이되었습니다. 이 방법 외에도 속성과 객체의 모든 이름을 얻을 수 있습니다. 아니면 객체와 속성의 이름을 찾는 다른 방법이 있습니까?
Jayapal Chandran

34
+1, 모든 자바 스크립트가 브라우저에서 실행되거나 디버깅 될 수있는 것은 아닙니다.
Bill Yang

3
대부분의 경우 hasOwnProperty를 사용하여 내장 된 크래프트를 숨길 수 있습니다.
John

9
세상에-0 : [; 1 : o; 2 : b; 3 : j; 4 : e; 5 : c; 6 : t; 7 :; 8 : O; 9 : b; 10 : j; 11 : e; 12 : c; 13 : t; 14 :];
JSideris

1
이것을 발견하는 데 조금 늦었지만 작년 (29 8 월) 내 생일에 요청 한대로 작동하는 바이올린이 있습니다. jsfiddle.net/MrMarlow/fq53o6o9
MrMarlow

124

console.dir(object):

지정된 JavaScript 객체의 속성을 대화식으로 표시합니다. 이 목록을 사용하면 펼침 삼각형을 사용하여 자식 개체의 내용을 검사 할 수 있습니다.

console.dir()기능은 비표준입니다. 참조 MDN 웹 문서를


1
예,이 방법은 좋은 해결책이지만 개체 만 기록하려는 경우 예상대로 작동합니다 (예 : console.dir (obj)). 스팅을 출력에 연결하려는 경우 [object Object]가 표시됩니다.
Zoman

console.dir변수의 가비지 수집 후에도 콘솔에서 값을 확장하고 읽을 수 있다는 장점 이 있습니다. 이것은 다른 SO 기사에
Dawson B

또한 console.dir콘솔에 파일을 저장할 때 모든 속성이 예상대로 파일에 있다는 장점이 있습니다. console.log 만 사용할 때는 발생하지 않습니다.
Kepi

79

이 시도 :

console.log(JSON.stringify(obj))

그러면 stringify 버전의 객체가 인쇄됩니다. 따라서 [object]출력 대신 객체의 내용을 얻습니다.


7
typeerror: Converting circular structure to JSON?
Kaiden Prince

@KaidenPrince는 오류에 대한이 답변을 참조하십시오 : stackoverflow.com/questions/4816099/… 객체의 DOM 요소 일 가능성이 있습니다. 이 경우 크롬이나 파이어 폭스로 콘솔에 로그인하여 검사하는 것이 가장 좋습니다. 그렇지 않으면 JSON.stringify가 호출되기 전에 모든 원형 요소를 제거해야합니다.
Ace Hyzer

해결책은 단순히 두 개의 개별 명령으로 나누거나 믿지 않는 것입니다. console.log ( "id :"); console.log (obj);
Collin Chaffin

66

Firefox (자세한 정보는 @Bojangles 덕분에)에는 Object.toSource()객체를 JSON 및로 인쇄하는 방법이 있습니다 function(){}.

그것은 대부분의 디버깅 목적으로 충분합니다.


6
Object.toSource ()가 Chrome에서 작동하지 않는 것 같습니다. 아니면 Chrome이 "고급 브라우저"에 속하지 않습니까? =)
tstyle

44
오래된 스레드, 방금 Google을 통해 발견했습니다. .toSource()실제로 Firefox 전용 입니다. 내가 알려줄 것 같아서
Bojangles

52

경고를 사용하여 객체를 인쇄하려면 다음을 수행하십시오.

alert("myObject is " + myObject.toSource());

각 속성과 해당 값을 문자열 형식으로 인쇄해야합니다.


18
toSource ()는 gecko 이외의 브라우저 (예 : Chrome, Safari)에서 작동하지 않습니다
Yarin

37

데이터를 표 형식으로 보려면 다음을 사용할 수 있습니다

console.table(obj);

테이블 열을 클릭하면 테이블을 정렬 할 수 있습니다.

표시 할 열을 선택할 수도 있습니다.

console.table(obj, ['firstName', 'lastName']);

console.table에 대한 자세한 내용은 여기를 참조하십시오.


34

NodeJS에서는를 사용하여 객체를 인쇄 할 수 있습니다 util.inspect(obj). 깊이를 명시해야합니다. 그렇지 않으면 물체가 얕게 인쇄됩니다.


33

함수:

var print = function(o){
    var str='';

    for(var p in o){
        if(typeof o[p] == 'string'){
            str+= p + ': ' + o[p]+'; </br>';
        }else{
            str+= p + ': { </br>' + print(o[p]) + '}';
        }
    }

    return str;
}

용법:

var myObject = {
    name: 'Wilson Page',
    contact: {
        email: 'wilson@hotmail.com',
        tel: '123456789'
    }  
}

$('body').append( print(myObject) );

예:

http://jsfiddle.net/WilsonPage/6eqMn/


Print 메소드는 페이지를 pdf로 인쇄하기 위해 브라우저를 호출합니다 : p
Marwen Trabelsi

@ jsh if-else를 돌리고 문자열 대신 객체를 확인해야합니다. 업데이트 된 바이올린 : jsfiddle.net/6eqMn/594
Michael Walter

1
@wilsonpage tel 속성에 정수 값을 추가하면 실패합니다 :(
ni3

26

간단히 사용

JSON.stringify(obj)

var args_string = JSON.stringify(obj);
console.log(args_string);

또는

alert(args_string);

또한 자바 스크립트 함수에서 참고는 객체로 간주됩니다.

추가 참고 사항 :

실제로 이와 같은 새로운 속성을 할당하고 console.log에 액세스하거나 경고로 표시 할 수 있습니다

foo.moo = "stackoverflow";
console.log(foo.moo);
alert(foo.moo);

1
질문 자체에는 "변수를 '경고'할 때와 마찬가지로"실제로 답변이 아닙니다. 또한 다른 옵션 "JSON.stringify (obj)"는 이미 "2010 년 11 월 27 일"에서 언급되었으므로이 질문은 중복되고 답이없는 것으로 혼란스럽게됩니다. 이 맥락에서 새로운 속성을 할당하는 것에 대한 당신의 주장은 의미가 없습니다.
Paul


18

내가 전에 발견 한 가장 간단하고 가장 간단한 방법은

var getPrintObject=function(object)
{
    return JSON.stringify(object);
}

가장 쉽고 빠른 솔루션이지만와 같은 큰 개체에서는 작동하지 않습니다 navigator.
someguy234


16

주의 사항 :이 예제에서 yourObj는 검사하려는 객체를 정의합니다.

먼저 가장 좋아하지는 않지만 가장 많이 사용되는 객체를 표시하는 방법은 다음과 같습니다.

이것은 객체의 내용을 보여주는 사실상의 방법입니다

console.log(yourObj)

다음과 같은 것을 생성합니다 : 여기에 이미지 설명을 입력하십시오

가장 좋은 해결책은 객체 키를 살펴본 다음 객체가 무엇을 보유하고 있는지 실제로보고 싶다면 객체 값을 보는 것입니다 ...

console.log(Object.keys(yourObj));
console.log(Object.values(yourObj));

다음과 같이 출력됩니다 : 여기에 이미지 설명을 입력하십시오 (위 그림 : 객체에 저장된 키 / 값)

ECMAScript 2016 이상을 사용하는 경우이 새로운 옵션도 있습니다.

Object.keys(yourObj).forEach(e => console.log(`key=${e}  value=${yourObj[e]}`));

:이 깔끔한 출력을 생성합니다 여기에 이미지 설명을 입력하십시오 : 이전의 대답에 언급 된 솔루션을 console.log(yourObj)표시 너무 많은 매개 변수를하고 원하는 데이터를 표시하는 가장 사용자 친화적 인 방법이 아니다 . 그래서 로깅 키와 값을 별도로 권장합니다.

다음 :

console.table(yourObj)

이전 의견의 누군가가 이것을 제안했지만 결코 효과가 없었습니다. 다른 브라우저 또는 다른 사람을 위해 다른 사람을 위해 작동한다면, kudos! 여전히 코드를 여기에 넣어 참조하십시오! 다음과 같이 콘솔에 출력합니다. 여기에 이미지 설명을 입력하십시오


Object와 obj를 포함하도록 예제를 확장 하시겠습니까?
historystamp

주석을 이해하지 못했지만 이름이 있어야하는 객체에 다른 이름을 추가했습니다. 개체가 충분히 명시 적이 지 않았습니다.
맥스 알렉산더 한나

console.table(yourObj) Chrome 버전 77.0.3865.90 (공식 빌드) (64 비트)에서 나를 위해 일했습니다. 공유해 주셔서 감사합니다!
Devner

15

(이것은 GitHub의 내 라이브러리에 추가되었습니다 )

바퀴를 재발 명! 이 솔루션 중 어느 것도 내 상황에 효과가 없었습니다. 그래서 나는 wilsonpage 의 대답을 빨리 닥쳤다 . 이것은 콘솔, 텍스트 필드 등을 통해 화면에 인쇄하기위한 것이 아닙니다. 이러한 상황에서는 제대로 작동하고 OP가 요청 한대로 작동합니다 alert. 여기에 많은 답변 alert이 OP 요청대로 사용하지 않습니다 . 그러나 데이터 전송 형식으로되어 있습니다. 이 버전은와 매우 유사한 결과를 반환하는 것 같습니다 toSource(). 나는에 대해 테스트하지 JSON.stringify않았지만 이것이 거의 같은 것으로 가정합니다. 이 버전은 모든 환경에서 사용할 수 있도록 폴리 파일과 비슷합니다. 이 함수의 결과는 유효한 Javascript 객체 선언입니다.

이 같은 것이 이미 어딘가에 있었는지 의심 할 여지가 없지만 과거 답변을 검색하는 데 시간을 보내는 것보다 짧았습니다. 그리고이 질문은 내가 이것에 대해 검색하기 시작할 때 Google에서 가장 큰 인기를 얻었 기 때문에; 나는 그것을 여기에 두는 것이 다른 사람들을 도울 것이라고 생각했다.

어쨌든이 함수의 결과는 객체에 객체와 배열이 포함되어 있고 객체 나 배열에 객체와 배열이 더 포함되어 있어도 객체의 문자열 표현이됩니다. (나는 당신이 마시는 것을 좋아한다고 들었습니까? 그래서, 나는 당신의 차를 냉각기로 포주했습니다. 그리고 나서, 당신의 냉각기를 냉각기로 포주했습니다.

배열은 []대신에 저장 {}되므로 키 / 값 쌍이 없으며 값만 있습니다. 일반 배열처럼. 따라서 배열처럼 생성됩니다.

또한 모든 문자열 (키 이름 포함)이 인용되므로 문자열에 공백이나 슬래시와 같은 특수 문자가없는 한 필요하지 않습니다. 그러나 나는 여전히 잘 작동하는 따옴표를 제거하기 위해 이것을 감지하고 싶지 않았습니다.

그런 다음이 결과 문자열을 사용하여 eval또는 문자열을 통해 var 조작으로 덤프 할 수 있습니다. 따라서 텍스트에서 객체를 다시 생성하십시오.

function ObjToSource(o){
    if (!o) return 'null';
    var k="",na=typeof(o.length)=="undefined"?1:0,str="";
    for(var p in o){
        if (na) k = "'"+p+ "':";
        if (typeof o[p] == "string") str += k + "'" + o[p]+"',";
        else if (typeof o[p] == "object") str += k + ObjToSource(o[p])+",";
        else str += k + o[p] + ",";
    }
    if (na) return "{"+str.slice(0,-1)+"}";
    else return "["+str.slice(0,-1)+"]";
}

내가 모두 엉망으로 만들면 알려주십시오. 내 테스트에서 잘 작동합니다. 또한 유형을 감지하려고 생각할 수있는 유일한 방법 array은의 존재를 확인하는 것입니다 length. Javascript는 실제로 배열을 객체로 저장하기 때문에 실제로 유형을 확인할 수 array없습니다 (이러한 유형은 없습니다!). 다른 사람이 더 나은 방법을 알고 있다면 듣고 싶습니다. 객체에 이름 length이 지정된 속성 이 있으면이 함수는 실수로 객체를 배열로 취급하기 때문입니다.

편집 : null 값 객체에 대한 검사가 추가되었습니다. 감사합니다 브록 아담스

편집 : 아래는 무한 재귀 객체를 인쇄 할 수있는 고정 기능입니다. 무한 재귀를 한 번 인쇄 toSource하기 때문에 FF 에서와 동일하게 인쇄되지 않습니다 toSource. 이 함수는 위의 함수보다 느리게 실행되므로 위의 함수를 편집하는 대신 여기에 추가합니다. 어딘가에 자신에게 다시 연결된 개체를 전달하려는 경우에만 필요합니다.

const ObjToSource=(o)=> {
    if (!o) return null;
    let str="",na=0,k,p;
    if (typeof(o) == "object") {
        if (!ObjToSource.check) ObjToSource.check = new Array();
        for (k=ObjToSource.check.length;na<k;na++) if (ObjToSource.check[na]==o) return '{}';
        ObjToSource.check.push(o);
    }
    k="",na=typeof(o.length)=="undefined"?1:0;
    for(p in o){
        if (na) k = "'"+p+"':";
        if (typeof o[p] == "string") str += k+"'"+o[p]+"',";
        else if (typeof o[p] == "object") str += k+ObjToSource(o[p])+",";
        else str += k+o[p]+",";
    }
    if (typeof(o) == "object") ObjToSource.check.pop();
    if (na) return "{"+str.slice(0,-1)+"}";
    else return "["+str.slice(0,-1)+"]";
}

테스트:

var test1 = new Object();
test1.foo = 1;
test1.bar = 2;

var testobject = new Object();
testobject.run = 1;
testobject.fast = null;
testobject.loop = testobject;
testobject.dup = test1;

console.log(ObjToSource(testobject));
console.log(testobject.toSource());

결과:

{'run':1,'fast':null,'loop':{},'dup':{'foo':1,'bar':2}}
({run:1, fast:null, loop:{run:1, fast:null, loop:{}, dup:{foo:1, bar:2}}, dup:{foo:1, bar:2}})

참고 : 인쇄 document.body하는 것은 끔찍한 예입니다. 우선, FF는를 사용할 때 빈 객체 문자열을 인쇄합니다 toSource. 그리고 위의 기능을 사용할 때 FF가 발생합니다 SecurityError: The operation is insecure.. 그리고 Chrome에서 충돌합니다 Uncaught RangeError: Maximum call stack size exceeded. 분명히 document.body문자열로 변환되지 않았습니다. 특정 속성에 액세스하기에는 너무 크거나 보안 정책에 위배되기 때문입니다. 내가 여기서 뭔가 엉망이 아니라면 말하지 마라!


충돌하기 쉽다. ObjToSource(document.body)예를 들어 보십시오 .
Brock Adams

좋아, 나는 문제를 발견했다. null 값 객체를 확인하지 않았습니다. 이제 수정되었습니다. 그러나 ObjToSource(document.body)무한 재귀 때문에 여전히 할 수 없습니다 . document.body.toSource()FireFox 에서도 빈 개체를 반환합니다.
Pimp Trizkit

@BrockAdams-무한 재귀에 대한 수정 document.body이 있었지만 여전히 인쇄 할 수 없습니다. 참고를 참조하십시오.
Pimp Trizkit

document.body큰 문제를 지적하는 지름길이었습니다. 당신은 이제 그중 최악을 고쳤으며 이미 찬성했습니다. (하지만, 다른 접근 방식으로 처리 할 수 ​​있다고 생각합니다 document.body. 여기에있는 대부분의 답변도 이에 대해 잘 맞지 않을 것입니다.)
Brock Adams

글쎄, 당신 (또는 다른 사람)이 그러한 큰 객체가 재귀 중에 스택을 채우거나 보안 제한을 우회한다는 사실을 극복하는 방법에 대한 아이디어를 얻은 경우. 나는 그것을 듣고 싶습니다. 투표 해 주셔서 감사합니다!
Pimp Trizkit

14

전체 길이의 물체를 인쇄하려면

console.log (필수 ( 'util'). inspect (obj, {showHidden : false, 깊이 : null})

객체를 문자열로 변환하여 인쇄하려면

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


JSON.stringify문자열 객체와 연결하려고 할 때 를 추가해야 합니다. 를 사용 console.log(object)하면 객체의 내용을 인쇄해야합니다.
Satadru Biswas 22

12

방법은 다음과 같습니다.

console.log("%o", obj);

흥미 롭군 이것에 대한 더 많은 정보가 있습니까?
Luke

Chrome-dev-tool의 맥락에서 Google 은이 링크 에서 이것을 언급했습니다 . "문자열 대체 및 형식 지정"섹션 참조
chaco

나는 그것을 mdn docs 에서 보았다 .
Anton Harniakou

2
따라서 과소 평가 된 대답은 이것이 내가 찾던 것입니다.
Shubham Kushwah

11

pagewil의 답변이 제공하는 객체를 재귀 적으로 인쇄하는 방법이 필요했습니다 (감사합니다!). 특정 수준까지 인쇄하는 방법을 포함하고 간격을 추가하여 현재 수준을 기준으로 올바르게 들여 쓰기하여 읽기 쉽도록 약간 업데이트했습니다.

// Recursive print of object
var print = function( o, maxLevel, level ) {
    if ( typeof level == "undefined" ) {
        level = 0;
    }
    if ( typeof level == "undefined" ) {
        maxLevel = 0;
    }

    var str = '';
    // Remove this if you don't want the pre tag, but make sure to remove
    // the close pre tag on the bottom as well
    if ( level == 0 ) {
        str = '<pre>';
    }

    var levelStr = '';
    for ( var x = 0; x < level; x++ ) {
        levelStr += '    ';
    }

    if ( maxLevel != 0 && level >= maxLevel ) {
        str += levelStr + '...</br>';
        return str;
    }

    for ( var p in o ) {
        if ( typeof o[p] == 'string' ) {
            str += levelStr +
                p + ': ' + o[p] + ' </br>';
        } else {
            str += levelStr +
                p + ': { </br>' + print( o[p], maxLevel, level + 1 ) + levelStr + '}</br>';
        }
    }

    // Remove this if you don't want the pre tag, but make sure to remove
    // the open pre tag on the top as well
    if ( level == 0 ) {
        str += '</pre>';
    }
    return str;
};

용법:

var pagewilsObject = {
    name: 'Wilson Page',
    contact: {
        email: 'wilson@hotmail.com',
        tel: '123456789'
    }  
}

// Recursive of whole object
$('body').append( print(pagewilsObject) ); 

// Recursive of myObject up to 1 level, will only show name 
// and that there is a contact object
$('body').append( print(pagewilsObject, 1) ); 

일이 필요합니다. 쉼표, 따옴표 등이 누락되었습니다.
posfan12

6

나는 항상 사용 console.log("object will be: ", obj, obj1)합니다. 이 방법으로 JSON으로 stringify를 사용하여 해결 방법을 수행 할 필요가 없습니다. 객체의 모든 속성이 멋지게 확장됩니다.


6

콘솔 내에서 객체를 표시하는 다른 방법은을 사용하는 것입니다 JSON.stringify. 아래 예를 확인하십시오.

var gandalf = {
  "real name": "Gandalf",
  "age (est)": 11000,
  "race": "Maia",
  "haveRetirementPlan": true,
  "aliases": [
    "Greyhame",
    "Stormcrow",
    "Mithrandir",
    "Gandalf the Grey",
    "Gandalf the White"
  ]
};
//to console log object, we cannot use console.log("Object gandalf: " + gandalf);
console.log("Object gandalf: ");
//this will show object gandalf ONLY in Google Chrome NOT in IE
console.log(gandalf);
//this will show object gandalf IN ALL BROWSERS!
console.log(JSON.stringify(gandalf));
//this will show object gandalf IN ALL BROWSERS! with beautiful indent
console.log(JSON.stringify(gandalf, null, 4));

5

자바 스크립트 기능

<script type="text/javascript">
    function print_r(theObj){ 
       if(theObj.constructor == Array || theObj.constructor == Object){ 
          document.write("<ul>") 
          for(var p in theObj){ 
             if(theObj[p].constructor == Array || theObj[p].constructor == Object){ 
                document.write("<li>["+p+"] => "+typeof(theObj)+"</li>"); 
                document.write("<ul>") 
                print_r(theObj[p]); 
                document.write("</ul>") 
             } else { 
                document.write("<li>["+p+"] => "+theObj[p]+"</li>"); 
             } 
          } 
          document.write("</ul>") 
       } 
    } 
</script>

인쇄 대상

<script type="text/javascript">
print_r(JAVACRIPT_ARRAY_OR_OBJECT);
</script> 

Javascript에서 print_r을 통해


이것이 내가 사용하는 js.do 예제의 버그인지 확실하지 않지만 트리의 첫 번째 전체 "분기"를 출력하는 것 같습니다. 즉, 그것은 첫 번째 참조의 첫 번째 참조를 따른다. ad infinitum
Jon Story

5
var list = function(object) {
   for(var key in object) {
     console.log(key);
   }
}

object당신의 개체는 어디에 있습니까

또는 크롬 개발 도구의 "콘솔"탭에서 사용할 수 있습니다.

console.log(object);


귀하의 답변이 불완전하다고 생각합니다. (공감의 원인이 아님) 아직 열쇠 만 인쇄하십시오.
Abdillah

1
귀하의 답변에 감사드립니다, 그것은 나에게 이렇게 영감을주었습니다 : console.log(Object.keys(object));나는 속성 키만 인쇄한다는 것을 알고 있지만, 그것은 나의 목적을 위해 충분합니다.)
Wilson

5

객체를 가정 obj = {0:'John', 1:'Foo', 2:'Bar'}

객체의 내용 인쇄

for (var i in obj){
    console.log(obj[i], i);
}

콘솔 출력 (Chrome DevTools) :

John 0
Foo 1
Bar 2

희망이 도움이됩니다!


4

console.table명확한 객체 형식을 얻는 데 선호 하므로이 객체가 있다고 상상해보십시오.

const obj = {name: 'Alireza', family: 'Dezfoolian', gender: 'male', netWorth: "$0"};

그리고 당신은 아래와 같이 깔끔하고 읽기 쉬운 테이블을 보게 될 것입니다 : console.table


3

콘솔을 통해 간단하고 빠른 디버깅을 위해 프로젝트에서 항상 사용하는 작은 도우미 기능. Laravel에서 가져온 영감.

/**
 * @param variable mixed  The var to log to the console
 * @param varName string  Optional, will appear as a label before the var
 */
function dd(variable, varName) {
    var varNameOutput;

    varName = varName || '';
    varNameOutput = varName ? varName + ':' : '';

    console.warn(varNameOutput, variable, ' (' + (typeof variable) + ')');
}

용법

dd(123.55); 출력 :
여기에 이미지 설명을 입력하십시오

var obj = {field1: 'xyz', field2: 2016};
dd(obj, 'My Cool Obj'); 

여기에 이미지 설명을 입력하십시오


3

ES6 템플릿 리터럴 개념을 사용하여 JavaScript 객체의 내용을 문자열 형식으로 표시 할 수도 있습니다.

alert(`${JSON.stringify(obj)}`);

const obj  = {
  "name" : "John Doe",
  "habbits": "Nothing",
};
alert(`${JSON.stringify(obj)}`);


2

나는 pagewil의 인쇄 방법을 사용했으며 매우 잘 작동했습니다.

다음은 (느슨한) 들여 쓰기와 고유 한 prop / ob 구분자가있는 약간 확장 된 버전입니다.

var print = function(obj, delp, delo, ind){
    delp = delp!=null ? delp : "\t"; // property delimeter
    delo = delo!=null ? delo : "\n"; // object delimeter
    ind = ind!=null ? ind : " "; // indent; ind+ind geometric addition not great for deep objects
    var str='';

    for(var prop in obj){
        if(typeof obj[prop] == 'string' || typeof obj[prop] == 'number'){
          var q = typeof obj[prop] == 'string' ? "" : ""; // make this "'" to quote strings
          str += ind + prop + ': ' + q + obj[prop] + q + '; ' + delp;
        }else{
          str += ind + prop + ': {'+ delp + print(obj[prop],delp,delo,ind+ind) + ind + '}' + delo;
        }
    }
    return str;
};

매우 조잡합니다.
posfan12

2

pagewils 코드의 또 다른 수정 ... 그는 문자열 이외의 것을 인쇄하지 않고 숫자와 부울 필드를 비워두고 megaboss가 만든 함수 내부의 두 번째 유형에 오타를 수정했습니다.

var print = function( o, maxLevel, level )
{
    if ( typeof level == "undefined" )
    {
        level = 0;
    }
    if ( typeof maxlevel == "undefined" )
    {
        maxLevel = 0;
    }

    var str = '';
    // Remove this if you don't want the pre tag, but make sure to remove
    // the close pre tag on the bottom as well
    if ( level == 0 )
    {
        str = '<pre>';   // can also be <pre>
    }

    var levelStr = '<br>';
    for ( var x = 0; x < level; x++ )
    {
        levelStr += '    ';   // all those spaces only work with <pre>
    }

    if ( maxLevel != 0 && level >= maxLevel )
    {
        str += levelStr + '...<br>';
        return str;
    }

    for ( var p in o )
    {
        switch(typeof o[p])
        {
          case 'string':
          case 'number':    // .tostring() gets automatically applied
          case 'boolean':   // ditto
            str += levelStr + p + ': ' + o[p] + ' <br>';
            break;

          case 'object':    // this is where we become recursive
          default:
            str += levelStr + p + ': [ <br>' + print( o[p], maxLevel, level + 1 ) + levelStr + ']</br>';
            break;
        }
    }

    // Remove this if you don't want the pre tag, but make sure to remove
    // the open pre tag on the top as well
    if ( level == 0 )
    {
        str += '</pre>';   // also can be </pre>
    }
    return str;
};

2

여기 기능이 있습니다.

function printObj(obj) {
console.log((function traverse(tab, obj) {
    let str = "";
    if(typeof obj !== 'object') {
        return obj + ',';
    }
    if(Array.isArray(obj)) {            
        return '[' + obj.map(o=>JSON.stringify(o)).join(',') + ']' + ',';
    }
    str = str + '{\n';
    for(var p in obj) {
        str = str + tab + ' ' + p + ' : ' + traverse(tab+' ', obj[p]) +'\n';
    }
    str = str.slice(0,-2) + str.slice(-1);                
    str = str + tab + '},';
    return str;
}('',obj).slice(0,-1)))};

가독성이있는 탭 들여 쓰기를 사용하여 객체를 표시 할 수 있습니다.


P : 물론 샷 브라우저 충돌합니다
Satadru Biswas
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.