경고 상자에서 개체를 검사하려면 어떻게해야합니까? 일반적으로 Object에 경고하면 노드 이름이 발생합니다.
alert(document);
하지만 경고 상자에서 개체의 속성과 메서드를 가져오고 싶습니다. 가능하면이 기능을 어떻게 얻을 수 있습니까? 아니면 다른 제안이 있습니까?
특히 console.log 및 Firebug를 사용할 수없는 프로덕션 환경에 대한 솔루션을 찾고 있습니다.
JSON.stringify
도움이됩니다.
경고 상자에서 개체를 검사하려면 어떻게해야합니까? 일반적으로 Object에 경고하면 노드 이름이 발생합니다.
alert(document);
하지만 경고 상자에서 개체의 속성과 메서드를 가져오고 싶습니다. 가능하면이 기능을 어떻게 얻을 수 있습니까? 아니면 다른 제안이 있습니까?
특히 console.log 및 Firebug를 사용할 수없는 프로덕션 환경에 대한 솔루션을 찾고 있습니다.
JSON.stringify
도움이됩니다.
답변:
은 for
- in
객체 나 배열의 각 속성에 대해 반복합니다. 이 속성을 사용하여 값을 가져오고 변경할 수 있습니다.
참고 : "스파이"를 사용하지 않는 한 개인 속성은 검사에 사용할 수 없습니다. 기본적으로 객체를 재정의하고 객체의 컨텍스트 내에서 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()
출력 형식 지정 또는 미리 설정에 대한 정보를 제공합니다.
alert(JSON.stringify(object, null, 4)
, 어디에 4
들여 쓰기에 사용되는 공간의 수입니다.
stringify
메소드를 표시하지 않습니다 : JSON.stringify({f: ()=>{}}) => "{}"
. 또한 객체가 toJSON
메소드를 구현 하면 해당 메소드가 반환하는 것을 얻습니다 JSON.stringify({toJSON: () => 'nothin'}) => '"nothin"'
. 객체를 검사하려는 경우 쓸모가 없습니다 ..
사용 console.dir(object)
및 Firebug 플러그인
console.dir
기능을 인식하지 못했습니다 . Firebug에서 더 이상 전체 개체를 볼 수없는 이유를 파악할 수 없었습니다. 이것은 이제 나를 위해 그것을 정렬했습니다. 감사!
console.log
는 표시 편리 외에하십시오
몇 가지 방법이 있습니다.
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 });
이것은 콘솔에 기록 된 개체에 레이블을 지정하는 데 도움이됩니다.
console
스타일링 stackoverflow.com/q/7505623/1480391을 사용 하고 있고 호환되지 않기 때문에 사용할 수 없습니다
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
다음은 더 읽기 쉬운 객체 검사기입니다. 여기에 코드를 작성하는 데 시간이 오래 걸리기 때문에 http://etto-aa-js.googlecode.com/svn/trunk/inspector.js 에서 다운로드 할 수 있습니다 .
다음과 같이 사용하십시오.
document.write(inspect(object));
console.log
파이어 폭스 나 크롬에