我们需要看看Javascript中对象有什么方法/字段。
当前回答
可以使用console.debug(object)来实现这一点再简单不过了。如果你以此为生,这个技巧将为你每年节省数百个小时
其他回答
控制台。在firebug或google-chrome web-inspector中的Dir(指向链接页面的底部)将输出一个对象属性的交互式列表。
再看看这个Stack-O的答案
我只是想添加一些关于console.log的相对重要的东西
如果您正在调试大型变量(如大型音频或视频数据缓冲区)。当你打印console.log(big_variable)时,控制台只会显示其中的一小部分。(这似乎有点明显)。
然而,如果变量处于循环中,并且这个变量不断变化,如果你曾经“将它复制到剪贴板中”,浏览器会做的是再次请求该变量(并且在你复制的时候可能已经改变了)。
我来告诉你我的故事。我正在编写一个处理大块音频数据的应用程序,使用大小为8192的float32数组。如果缓冲区具有某些特征,我将使用console.log()打印变量,然后获取该变量进行测试并摆弄它(甚至将其用于模拟,以便进行自动化测试)
然而,结果永远不会成立。麦克风会捕捉音频数据,存储在这个上。audioBuffer变量和整个事情将工作,但当我从console.log复制那个确切的变量时,我可以把它作为一个模拟来运行一些自动化测试,行为将发生巨大变化。
我花了一段时间才弄清楚这一点,显然,每当我在调试器中“复制”或“将变量设置为全局”时,而不是复制console.log中显示的变量,jsvm会要求this。audioBuffer。由于变量是在循环中使用的,麦克风仍然会录音,我将得到一个完全不同的声音数组,而不是我正在听的声音,并认为音频缓冲区是放在第一位的。
如果您正在处理大型复杂数据结构,如音频或视频文件,图像文件……当你在chrome /firefox / edge控制台读取这些值时,这些值可能会发生变化,请确保你不是console.log(变量),而是console.log(JSON.stringify(变量))。这会为你节省大量的时间
正如其他人所说,您可以使用Firebug,这将使您不必担心Firefox。Chrome和Safari都有一个内置的开发控制台,它与Firebug的控制台有着几乎相同的界面,所以你的代码应该可以在这些浏览器之间移植。对于其他浏览器,有Firebug Lite。
如果Firebug不适合你,那么试试这个简单的脚本:
function dump(obj) {
var out = '';
for (var i in obj) {
out += i + ": " + obj[i] + "\n";
}
alert(out);
// or, if you wanted to avoid alerts...
var pre = document.createElement('pre');
pre.innerHTML = out;
document.body.appendChild(pre)
}
我建议不要提醒每个单独的属性:有些对象有很多属性,你会在那里点击“OK”,“OK”,“OK”,“O…该死,这就是我要找的东西。”
console.log(OBJECT|ARRAY|STRING|...);
console.info(OBJECT|ARRAY|STRING|...);
console.debug(OBJECT|ARRAY|STRING|...);
console.warn(OBJECT|ARRAY|STRING|...);
console.assert(Condition, 'Message if false');
这些应该在谷歌Chrome和Mozilla Firefox上正常工作(如果你使用的是旧版本的Firefox,那么你必须安装Firebug插件) 在ie8或更高版本上,您必须执行以下操作:
启动“开发人员工具”,点击F12按钮 在标签列表中,点击“脚本”标签 点击右边的“控制台”按钮
欲了解更多信息,请访问此URL: https://developer.chrome.com/devtools/docs/console-api
我用了第一个答案,但我觉得里面少了一个递归。
结果是:
function dump(obj) {
var out = '';
for (var i in obj) {
if(typeof obj[i] === 'object'){
dump(obj[i]);
}else{
out += i + ": " + obj[i] + "\n";
}
}
var pre = document.createElement('pre');
pre.innerHTML = out;
document.body.appendChild(pre);
}
推荐文章
- Babel 6改变了它导出默认值的方式
- 如何配置历史记录?
- ES6模板文字可以在运行时被替换(或重用)吗?
- [Vue警告]:找不到元素
- 可以在setInterval()内部调用clearInterval()吗?
- AngularJS控制器的生命周期是什么?
- 无法读取未定义的属性“msie”- jQuery工具
- 我的蛋蛋怎么不见了?
- JavaScript中的排列?
- JavaScript中有睡眠/暂停/等待功能吗?
- 如何禁用文本选择使用jQuery?
- 原则-如何打印出真正的sql,而不仅仅是准备好的语句?
- 如何从关联PHP数组中获得第一项?
- 如何停止事件冒泡复选框点击
- PHP/MySQL插入一行然后获取id