如何检查警报框中的对象?通常,警告对象只会抛出节点名:
alert(document);
但是我想在警报框中获取对象的属性和方法。如果可能,如何实现此功能?还是有其他建议?
尤其是,我正在寻找针对console.log和Firebug不可用的生产环境的解决方案。
JSON.stringify
是有帮助的。
如何检查警报框中的对象?通常,警告对象只会抛出节点名:
alert(document);
但是我想在警报框中获取对象的属性和方法。如果可能,如何实现此功能?还是有其他建议?
尤其是,我正在寻找针对console.log和Firebug不可用的生产环境的解决方案。
JSON.stringify
是有帮助的。
Answers:
的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:好吧,我还是写了一篇。
怎么样 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);
这是对克里斯蒂安出色回答的公然剥夺。我使它更具可读性:
/**
* 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
在Firefox或Chrome