[javascript] 자바 스크립트 객체를 검사하는 방법

경고 상자에서 개체를 검사하려면 어떻게해야합니까? 일반적으로 Object에 경고하면 노드 이름이 발생합니다.

alert(document);

하지만 경고 상자에서 개체의 속성과 메서드를 가져오고 싶습니다. 가능하면이 기능을 어떻게 얻을 수 있습니까? 아니면 다른 제안이 있습니까?

특히 console.log 및 Firebug를 사용할 수없는 프로덕션 환경에 대한 솔루션을 찾고 있습니다.



답변

forin객체 나 배열의 각 속성에 대해 반복합니다. 이 속성을 사용하여 값을 가져오고 변경할 수 있습니다.

참고 : “스파이”를 사용하지 않는 한 개인 속성은 검사에 사용할 수 없습니다. 기본적으로 객체를 재정의하고 객체의 컨텍스트 내에서 for-in 루프를 수행하는 코드를 작성합니다.

in은 다음과 같습니다.

for (var property in object) loop();

일부 샘플 코드 :

function xinspect(o,i){
    if(typeof i=='undefined')i='';
    if(i.length>50)return '[MAX ITERATIONS]';
    var r=[];
    for(var p in o){
        var t=typeof o[p];
        r.push(i+'"'+p+'" ('+t+') => '+(t=='object' ? 'object:'+xinspect(o[p],i+'  ') : o[p]+''));
    }
    return r.join(i+'\n');
}

// example of use:
alert(xinspect(document));

편집 : 얼마 전, 저는 제 자신의 검사관을 썼습니다. 관심이 있으시다면 기꺼이 공유하겠습니다.

편집 2 : 글쎄, 어쨌든 하나를 썼습니다.


답변

방법에 대한 alert(JSON.stringify(object))현대적인 브라우저?

의 경우 TypeError: Converting circular structure to JSON더 많은 옵션이 있습니다. 순환 참조가 있어도 DOM 노드를 JSON으로 직렬화하는 방법은 무엇입니까?

문서 : JSON.stringify()출력 형식 지정 또는 미리 설정에 대한 정보를 제공합니다.


답변

사용 console.dir(object)및 Firebug 플러그인


답변

몇 가지 방법이 있습니다.

 1. typeof tells you which one of the 6 javascript types is the object.
 2. instanceof tells you if the object is an instance of another object.
 3. List properties with for(var k in obj)
 4. Object.getOwnPropertyNames( anObjectToInspect )
 5. Object.getPrototypeOf( anObject )
 6. anObject.hasOwnProperty(aProperty) 

콘솔 컨텍스트에서 때때로 .constructor 또는 .prototype이 유용 할 수 있습니다.

console.log(anObject.constructor );
console.log(anObject.prototype ) ; 


답변

콘솔 사용 :

console.log(object);

또는 html dom 요소를 검사하는 경우 console.dir (object)를 사용하십시오. 예:

let element = document.getElementById('alertBoxContainer');
console.dir(element);

또는 js 객체 배열이있는 경우 다음을 사용할 수 있습니다.

console.table(objectArr);

console.log (objects)를 많이 출력하는 경우 다음과 같이 작성할 수도 있습니다.

console.log({ objectName1 });
console.log({ objectName2 });

이것은 콘솔에 기록 된 개체에 레이블을 지정하는 데 도움이됩니다.


답변

var str = "";
for(var k in obj)
    if (obj.hasOwnProperty(k)) //omit this test if you want to see built-in properties
        str += k + " = " + obj[k] + "\n";
alert(str);


답변

이것은 Christian의 탁월한 대답을 노골적으로 뜯어 낸 것입니다. 좀 더 읽기 쉽게 만들었습니다.

/**
 * objectInspector digs through a Javascript object
 * to display all its properties
 *
 * @param object - a Javascript object to inspect
 * @param result - a string of properties with datatypes
 *
 * @return result - the concatenated description of all object properties
 */
function objectInspector(object, result) {
    if (typeof object != "object")
        return "Invalid object";
    if (typeof result == "undefined")
        result = '';

    if (result.length > 50)
        return "[RECURSION TOO DEEP. ABORTING.]";

    var rows = [];
    for (var property in object) {
        var datatype = typeof object[property];

        var tempDescription = result+'"'+property+'"';
        tempDescription += ' ('+datatype+') => ';
        if (datatype == "object")
            tempDescription += 'object: '+objectInspector(object[property],result+'  ');
        else
            tempDescription += object[property];

        rows.push(tempDescription);
    }//Close for

    return rows.join(result+"\n");
}//End objectInspector