Как проверить объекты Javascript - PullRequest
94 голосов
/ 18 марта 2011

Как я могу проверить объект в окне предупреждения?Обычно при оповещении об объекте просто выбрасывается имя узла:

alert(document);

Но я хочу получить свойства и методы объекта в окне предупреждения.Как я могу достичь этой функциональности, если это возможно?Или есть другие предложения?

В частности, я ищу решение для производственной среды, где console.log и Firebug недоступны.

Ответы [ 8 ]

190 голосов
/ 19 марта 2011

Как насчет alert(JSON.stringify(object)) с современным браузером?

В случае TypeError: Converting circular structure to JSON, здесь есть несколько вариантов: Как сериализовать узел DOM в JSON, даже если есть циклические ссылки?

Документация: JSON.stringify() содержит информацию о форматировании или предварительном кодировании вывода.

55 голосов
/ 18 марта 2011

Циклы for - in для каждого свойства объекта или массива. Вы можете использовать это свойство, чтобы получить значение и изменить его.

Примечание: Частные объекты недоступны для проверки, если вы не используете «шпиона»; в основном вы переопределяете объект и пишете некоторый код, который выполняет цикл for-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: Ну, я все равно написал один.

39 голосов
/ 05 июля 2012

Используйте console.dir(object) и плагин Firebug

17 голосов
/ 02 ноября 2013

Существует несколько методов:

 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 ) ; 
16 голосов
/ 23 ноября 2012

Используйте вашу консоль:

console.log(object);

Или, если вы просматриваете html-элементы dom, используйте console.dir (object). Пример:

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

Или, если у вас есть массив объектов js, вы можете использовать:

console.table(objectArr);

Если вы выводите много console.log (объектов), вы также можете написать

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

Это поможет вам пометить объекты, записанные на консоли.

9 голосов
/ 18 марта 2011
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);
6 голосов
/ 11 декабря 2013

Это откровенная грабеж превосходного ответа Кристиана.Я только что сделал это немного более читабельным:

/**
 * 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
4 голосов
/ 31 декабря 2014

Вот мой инспектор объектов, который более читабелен. Поскольку для написания кода требуется много времени, его можно загрузить по адресу http://etto -aa-js.googlecode.com / svn / trunk / inspector.js

Используйте вот так:

document.write(inspect(object));
...