为什么console.table()
不适用于所有对象/数组?
通过一些数据,我在开发者控制台中获得了格式良好的表格。对于其他数据,我什么都没得到......甚至没有错误信息。
我在遇到#Javascript30的挑战时刚刚了解了console.table()
。演示者使用console.table()
来表示某些输出,但不是全部,并且他没有解释原因。我试图将它用于所有(数组或对象)输出,并看到为什么......它不起作用。
这是一个不起作用的例子。
const data = ['car', 'car', 'truck', 'truck', 'bike', 'walk', 'car', 'van', 'bike', 'walk', 'car', 'van', 'car', 'truck' ];
const transportation = data.reduce((counters, item) => {
if (!counters[item]) counters[item] = 0;
counters[item]++;
return counters;
}, {});
console.log('transportation table');
console.table(transportation);
console.log('transportation log');
console.log(transportation);
<h1>Look at the console!</h1>
我希望console.table()
返回类似这样的内容:
...除了(索引)列包含汽车,卡车,自行车等,而且“值”列将包含计数。
显然console.table()
不适用于SO的代码片段...在这种情况下意味着它与浏览器的工作方式完全相同:P所以,我在CodePen上发布了一个问题示例: http://codepen.io/VAggrippino/pen/qRraEP
这是第四次挑战,Array Cardio 1对于那些跟随你的人。
我意识到这不是一个严格的编程/ JavaScript问题,因为控制台是浏览器的一个功能,而不是语言或DOM。我相信它是相关的,因为浏览器是所有Web开发人员使用的基本工具,并且每个主要浏览器都支持它。
答案 0 :(得分:30)
我目前正在为JS30进行相同的练习,遇到了和你一样的问题,这引起了我的兴趣。
我咨询了console.table() page on MDN,在做了一些测试之后,似乎这可能是Chrome问题。
从我的有限测试中看来,Chrome似乎没有为原始类型集合(字符串数组,单个对象)输出表,只输出复合类型的集合(数组/对象数组,属性为的对象)对象)。
这不起作用:
console.table(['1','2','3']);
但这样做:
console.table([['1','2','3']]);
我也在Canary上测试过,但结果相同。
但是在Firefox上,console.table()似乎工作正常。原始类型集合的MDN示例适用于Firefox,但不适用于Chrome。
要在Chrome上输出您的示例,您可以做的是将传输变量放在其自己的数组中,以便Chrome打印该表。
console.table([transportation]);
我很抱歉这不是一个非常好的或高级的答案,因为我不确定为什么Chrome有时只为console.table()打印。
很抱歉这个冗长的答案。&#39;这是我的第一篇文章,所以我希望它有所帮助。如果有人知道完整答案,请编辑我的帖子!
答案 1 :(得分:0)
理论上,console.table()打印表(2维)而非数组(1维),因此外部数组是行列表(如<tr>
s),每个内部数组包含每列的值该行(如<td>
s)。
答案 2 :(得分:0)
只需打开新选项卡并打开控制台,然后键入console.table([['1','2','3']]));并运行它,然后尝试运行您的文件,看看是否可行。但是对我来说却有效!
答案 3 :(得分:-1)
我不知道这是如何运作的,但它对我有用。我很高兴,如果这有助于你,如果你找到一些有效的解决方案随时编辑这篇文章