console.log 显示数组对象的内容

Posted

技术标签:

【中文标题】console.log 显示数组对象的内容【英文标题】:console.log showing contents of array object 【发布时间】:2011-12-16 06:55:45 【问题描述】:

我已尝试使用console.log,因此我可以看到包含多个对象的数组的内容。但是我收到一条错误消息,说 console.log 不是对象等。我使用的是 jquery 1.6.2,我的数组是这样的:

filters = dvals:['brand':'1', 'count':'1',
                  'brand':'2', 'count':'2', 
                  'brand':'3', 'count':'3']

console.log(filters);

我想做的是以过滤器格式将array(filters) 的内容写到警报框(我认为console.log 就是这样做的)。我该怎么做?

【问题讨论】:

你用的是什么浏览器? console 对象仅在某些浏览器或附加组件上可用 为我工作:jsfiddle.net/PxZjr 我使用 IE 8 时没有出现警告消息框 console.log 仅可用于 firebug 作为独立调试器,这是您在使用 IE8 时必须使用的。或将 WebKit 浏览器作为其检查器的一部分,包括 Chrome、Safari 和 Opera。你的代码在所有这些对我来说都很好。 所以@ryanOptini 如何打印出我的数组的内容以显示在一个对话框中,我认为这就是console.log 的用途。 【参考方案1】:

javascript 中将对象打印到控制台很简单。只需使用以下语法:

console.log( object );

console.log('object: %O', object );

下面是一种相对未知的方法,它将对象或数组作为表格打印到控制台:

console.table(对象);

我认为重要的是要说这种日志记录语句只在浏览器环境中有效。我将它与谷歌浏览器一起使用。您可以在开发者控制台中查看您的 console.log 调用的输出:通过右键单击网页中的任何元素并选择“检查”来打开它。选择选项卡“控制台”。

【讨论】:

console.table( object ) 是个好主意,谢谢【参考方案2】:

console.log 不生成任何消息框。如果不添加 firebug 或类似的东西,我认为它在任何版本的 IE(或 Firefox)中都不可用。

但它在 Safari 和 Chrome 中可用。既然您提到了 Chrome,我将使用它作为我的示例。

您需要打开您的窗口及其对应的开发者窗口。您可以通过右键单击页面上的任何元素并选择“检查元素”来执行此操作。您的窗口将分为两部分,开发者部分位于底部。在这两个部分之间的划分是一个带有按钮的栏,最右边的按钮标有“控制台”。您需要单击它以切换到控制台选项卡。在 Windows 上的大多数浏览器中按 F12 可使用开发人员工具,在 macOS 上按 command + shift + I。

在那里,您将能够与从该控制台通过 javascript 在顶部加载的任何页面进行交互,并且您console.log 的任何消息都将显示在那里。

【讨论】:

您需要(安装和)激活 IE Developer Tools 调试器。只需转到网页进行调试,然后按 F12 按钮即可激活调试器。这定义了您在代码中使用的控制台。 @GuruM:这不会像在 FireFox 或 Chrome 中那样只写出对象而不是对象的内容。 @NeilKnight。提问者可以使用本页其他地方指定的技术进行查找。我只是在告诉他如何激活 IE 调试器。 Kris 没有提到如何在 IE 中打开调试器,所以只是填补了空白。【参考方案3】:

将数组转储为字符串有两种潜在的简单解决方案。根据您使用的环境:

...现代浏览器使用 JSON:

JSON.stringify(filters);
// returns this
""dvals":["brand":"1","count":"1","brand":"2","count":"2","brand":"3","count":"3"]"

...对于类似 node.js 的东西,你可以使用 console.info()

console.info(filters);
// will output:
 dvals: 
[  brand: '1', count: '1' ,
   brand: '2', count: '2' ,
   brand: '3', count: '3'  ] 

编辑:

JSON.stringify 带有另外两个可选参数。第三个“空格”参数可以实现漂亮的打印:

JSON.stringify(
                obj,      // the object to stringify
                replacer, // a function or array transforming the result
                spaces    // prettyprint indentation spaces
              )

示例:

JSON.stringify(filters, null, "  ");
// returns this
"
 "dvals": [
  
   "brand": "1",
   "count": "1"
  ,
  
   "brand": "2",
   "count": "2"
  ,
  
   "brand": "3",
   "count": "3"
  
 ]
"

【讨论】:

我建议有人在未来的 Javascript 版本中修复它,并在默认情况下使对象自动转换为合理的字符串表示形式。可能没有人想看到 Object[Object]。【参考方案4】:

我强烈推荐这个 sn-p 以确保意外留下的代码片段不会在客户端浏览器上失败:

/* neutralize absence of firebug */
if ((typeof console) !== 'object' || (typeof console.info) !== 'function') 
    window.console = ;
    window.console.info = window.console.log = window.console.warn = function(msg) ;
    window.console.trace = window.console.error = window.console.assert = function(msg) ;

而不是定义一个空函数,这个 sn-p 也是一个很好的起点,可以在需要时滚动您自己的控制台代理,即将这些信息转储到 .debug 容器中,显示警报(可能会得到很多)等等。 .

如果您确实使用 firefox+firebug,console.dir() 最适合转储数组输出,see here。

【讨论】:

【参考方案5】:

console 对象在 Internet Explorer 8 或更高版本中可用,但前提是您通过按 F12 或通过菜单打开“开发者工具”窗口。 p>

即使在关闭 IE 之前再次关闭开发者工具窗口,它仍然可用。

Chorme 和 Opera 总是有一个可用的console,至少在当前版本中是这样。 Firefox 在使用 Firebug 时有一个console,但它也可能提供一个没有 Firebug 的。

在任何情况下,使用console 输出是可选的。以下是一些关于如何做到这一点的示例:

if (console) 
    console.log('Hello World!');


if (console) console.debug('value of someVar: ' + someVar);

【讨论】:

我从未听说过这种方法,个人认为在调试一些代码时它有点不方便。当使用捆绑器时(比如 Angular 使用 Webpack 作为捆绑器),无论如何都会处理您的代码,并且所有日志语句都将被删除。【参考方案6】:

Json 代表 JavaScript Object Notation,实际上所有的 json 都是 javascript 对象,所以你的数组已经是 json 形式了。要将其写在 div 中,您可以做很多事情,我认为最简单的事情之一是:

 objectDiv.innerhtml = filter;

其中 objectDiv 是您希望使用 jquery 从 DOM 中选择的 div。如果你想列出数组的一部分,你可以访问它们,因为它是一个像这样的 javascript 对象:

 objectDiv.innerHTML = filter.dvals.valueToDisplay; //brand or count depending.

编辑:任何你想成为字符串但当前不是的东西(这是罕见的 javascript 将几乎所有东西都视为字符串)只需使用内置的 toString() 函数。所以如果你需要,上面的行将是 filter.dvals.valueToDisplay.toString();

第二次编辑澄清:这个答案是对 OP 的 cmets 的回应,而不是完全回应他原来的问题。

【讨论】:

【参考方案7】:

似乎 Firebug 或您正在使用的任何调试器未正确初始化。当您尝试访问 console.log() 方法时,您确定 Firebug 已完全初始化吗?检查控制台选项卡(如果它设置为激活)。

另一种可能性是,您自己在代码中的任何位置覆盖控制台对象。

【讨论】:

我在 IE8 和谷歌浏览器中使用 cosole.log 我没有得到任何结果是我使用的浏览器中的一些设置。 @KDM - console.log 消息将出现在 IE 开发人员工具调试器中“脚本”选项卡的“控制台”右侧窗口中。您需要访问要调试的网页,按 F12 键激活调试器。选择“开始调试”,然后选择“脚本”选项卡。运行脚本以在“控制台”窗口中查看日志消息。

以上是关于console.log 显示数组对象的内容的主要内容,如果未能解决你的问题,请参考以下文章

React、console.log 和 render 显示不同的值

VueJS、Vuex、Getter 显示为一个空数组,但 console.log 显示它是一个包含所有值的对象

为啥console.log 显示的数组与alert 不同?

内容太长,如何在console.log()中显示完整的内容?

javascript console.log 一个包含数组元素的对象时,输出的对象是修改后的,代码和输入如下

八个console命令,让js调试更简单