104

如何检查警报框中的对象?通常警告对象只会抛出节点名:

alert(document);

但是我想在警报框中获取对象的属性和方法。如果可能的话,我怎样才能实现这个功能?或者还有其他建议吗?

特别是,我正在为无法使用 console.log 和 Firebug 的生产环境寻找解决方案。

4

8 回答 8

196

alert(JSON.stringify(object))使用现代浏览器怎么样?

如果是TypeError: Converting circular structure to JSON,这里有更多选项:即使有循环引用,如何将 DOM 节点序列化为 JSON?

文档:JSON.stringify()提供有关格式化或美化输出的信息。

于 2011-03-18T21:21:13.773 回答
58

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));

编辑:前段时间,我写了自己的inspector,如果你有兴趣,我很乐意分享。

编辑2:好吧,我还是写了一个。

于 2011-03-18T20:25:39.983 回答
39

使用console.dir(object)和 Firebug 插件

于 2012-07-04T20:15:31.060 回答
19

有几种方法:

 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 ) ; 
于 2013-11-02T14:11:40.100 回答
17

使用您的控制台:

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 });

这将帮助您标记写入控制台的对象。

于 2012-11-22T20:16:20.697 回答
9
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);
于 2011-03-18T20:24:29.647 回答
6

这是对克里斯蒂安出色答案的公然剽窃。我刚刚使它更具可读性:

/**
 * 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
于 2013-12-11T07:52:50.670 回答
4

这是我的更具可读性的对象检查器。因为代码需要很长时间才能在这里写下来,您可以在http://etto-aa-js.googlecode.com/svn/trunk/inspector.js下载它

像这样使用:

document.write(inspect(object));
于 2014-12-31T00:25:17.550 回答