[译] 如何充分利用 JavaScript 控制台


JavaScript 中最基本的调试工具之一就是 console.log()console 还附带了一些其余好用的方法,能够添加到开发人员的调试工具包中。javascript

你能够使用 console 执行如下任务:前端

  • 输出一个计时器来协助进行简单的基准测试
  • 输出一个表格来以易读的格式显示一个数组或对象
  • 使用 CSS 将颜色和其余样式选项应用于输出

Console 对象

console 对象容许您访问浏览器的控制台。它容许你输出有助于调试代码的字符串、数组和对象。consolewindow 对象的属性,由浏览器对象模型(BOM)提供。java

咱们能够经过这两种方法之一访问 consolereact

  1. window.console.log('This works')
  2. console.log('So does this')

第二个选项本质上是对前者的引用,因此咱们使用后者以精简代码。android

关于 BOM 的快速提示:它没有设定标准,因此每家浏览器都以稍微不一样的方式实现。我在 Chrome 和 Firefox 测试了全部示例,但你的输出可能有所不一样,这取决于你使用的浏览器。ios

输出文本

将文本记录到控制台
console 对象最多见的元素是 console.log,对于大多数状况,使用它就能够完成任务。git

输出信息到控制台的四种方式:github

  1. log
  2. info
  3. warn
  4. error

他们四个工做方式相同。你惟一要作的是给选择的方法传递一个或更多的参数。控制台会显示不一样的图标来指示其记录级别。下面的例子中你能够看到 info 级别的记录和 warning/error 级别的不一样之处。redux

简单易读的输出后端

输出东西太多将变得难以阅读

你可能注意到了 error 日志消息 —— 它比其余消息更显眼。它显示着红色的背景和堆栈跟踪,而 infowarn 就不会。可是在 Chrome 中 warn 确实有一个黄色的背景。

视觉上的区分有助于你在控制台快速浏览辨别出错误或警告信息。你应该确保在准备生产的应用中移除它们,除非你打算让它们来警示其余操做你的代码的开发者。

字符串替换

这个技术能够使用字符串中的占位符来替换你向方法中传入的其余参数。

输入console.log('string %s', 'substitutions')

输出string substitutions

%s 是逗号后面第二个参数 'substitutions' 的占位符。任何的字符串、整数或数组都将被转换成字符串并替换 %s。若是你传入一个对象,它将显示为 [object Object]

若是你想传入对象,你须要使用 %o 或者 %O,而不是 %s

console.log('this is an object %o', { obj: { obj2: 'hello' }})

数字

字符串替换能够与整数和浮点数一块儿使用:

  • 整数使用 %i%d,
  • 浮点数使用 %f

输入console.log('int: %d, floating-point: %f', 1, 1.5)

输出int: 1, floating-point: 1.500000

能够使用 %.1f 来格式化浮点数,使小数点后仅显示一位小数。你能够用 %.nf 来显示小数点后 n 位小数。

若是咱们使用上述例子显示小数点后一位小数来格式化浮点数值,它看起来这样:

输入console.log('int: %d, floating-point: %.1f', 1, 1.5)

输出int: 1, floating-point: 1.5

格式化说明符

  1. %s | 使用字符串替换元素
  2. %(d|i)| 使用整数替换元素
  3. %f| 使用浮点数替换元素
  4. %(o|O) | 元素显示为一个对象
  5. %c | 应用提供的 CSS

字符串模板

随着 ES6 的出现,模板字符串是替换或链接的替代品。他们使用反引号(``)来代替引号,变量包裹在 ${} 中:

const a = 'substitutions';

console.log(`bear: ${a}`);

// bear: substitutions复制代码

对象在模板字符串中显示为 [object Object],因此你将须要使用 %o%O 替换以看到详情,或单独记录。

比起使用字符串链接:console.log('hello' + str + '!');,使用替换或模板能够建立更易读的代码。

美妙的彩色插曲!

如今,是时候来点更有趣而多彩的东西了!

是时候用字符串替换让咱们的 console 弹出丰富多彩的颜色了。

我将使用一个模仿 Ajax 的例子,给咱们显示一个请求成功(用绿色)和失败(用红色)。这是输出和代码:

成功的小熊和失败的蝙蝠

const success = [
 'background: green',
 'color: white',
 'display: block',
 'text-align: center'
].join(';');

const failure = [
 'background: red',
 'color: white',
 'display: block',
 'text-align: center'
].join(';');

console.info('%c /dancing/bears was Successful!', success);
console.log({data: {
 name: 'Bob',
 age: 'unknown'
}}); // "mocked" data response

console.error('%c /dancing/bats failed!', failure);
console.log('/dancing/bats Does not exist');复制代码

在字符串替换中使用 %c 占位符来应用你的样式规则。

console.error('%c /dancing/bats failed!', failure);复制代码

而后把你的 CSS 元素做为参数,你就能看到应用 CSS 的日志了。 你也能够给你的字符串添加多个 %c

console.log('%cred %cblue %cwhite','color:red;','color:blue;', 'color: white;')复制代码

这将按照他们的表明的颜色输出字符 “red”、“blue” 和 “white”。

控制台仅仅支持少数 CSS 属性,建议你试验一下哪些支持哪些不支持。重申一下,你的输出结果可能因你的浏览器而异。

其余可用的方法

还有几个其余可用的 console 方法。注意下面有几项还不是 API 标准,因此可能浏览器间互不兼容。这个例子使用的是 Firefox 51.0.1。

Assert()

Assert 携带两个参数 —— 若是第一个参数计算为 false,那么它将显示第二个参数。

let isTrue = false;

console.assert(isTrue, 'This will display');

isTrue = true;

console.assert(isTrue, 'This will not');复制代码

若是断言为 false,控制台将输出内容。它显示为一个上文提到的 error 级别的日志,给你显示一个红色的错误消息和堆栈跟踪。

Dir()

dir 方法显示一个传入对象的可交互属性列表。

console.dir(document.body);复制代码

Chrome 会显示不一样的层级
最终,dir 仅仅能节省一两次点击,若是你须要检查一个 API 响应返回的对象,你能够用它结构化地显示出来以节约一些时间。

Table()

table 方法用一个表格显示数组或对象

console.table(['Javascript', 'PHP', 'Perl', 'C++']);复制代码

输出数组

数组的索引或对象的属性名位于左侧的索引栏,值显示在右侧列栏。

const superhero = {
    firstname: 'Peter',
    lastname: 'Parker',
}
console.table(superhero);复制代码

输出对象

Chrome 用户须要注意: 这是个人同事提醒个人,上述 table 方法的例子在 Chrome 中貌似不能工做。你能够经过将项目放入数组或对象数组中来解决此问题。

console.table([['Javascript', 'PHP', 'Perl', 'C++']]);

const superhero = {
    firstname: 'Peter',
    lastname: 'Parker',
}
console.table([superhero]);复制代码

Group()

console.group() 由至少三个 console 调用组成,它多是使用时须要打最多字的方法。但它也是最有用的方法之一(特别对使用 Redux Logger 的开发者)。

稍基础的调用看起来是这样的:

console.group();
console.log('I will output');
console.group();
console.log('more indents')
console.groupEnd();
console.log('ohh look a bear');
console.groupEnd();复制代码

这将输出多个层级,显示效果因你的显示器而异。

Firefox 显示成缩进列表:

Chrome 显示成对象的风格:

每次调用 console.group() 都将开启一个新的组,若是在一个组内会建立一个新的层级。每次调用 console.groupEnd() 都会结束当前组或层级并向上移动一个层级。

我发现 Chrome 的输出样式更易读,由于它看起来像一个可折叠的对象。

你能够给 group 传入一个 header 参数,它将被显示并替代 console.group

console.group('Header');复制代码

若是你调用 console.groupCollapsed(),你能够从一开始就将这个组显示为折叠。据我所知,这个方法可能只有 Chrome 支持。

Time()

time 方法和上文的 group 方法相似,由两部分组成。

一个用于启动计时器的方法和一个中止它的方法。

一旦计时器完成,它将以毫秒为单位输出总运行时间。

启动计时器使用 console.time('id for timer'),结束计时器使用 console.timeEnd('id for timer')。您能够同时运行多达 10,000 个定时器。

输出结果可能有点像这样: timer: 0.57ms

当你须要作一个快速的基准测试时,它很是有用。

结论

咱们已经更深刻地了解了 console 对象以及其中附带的其余一些方法。当咱们须要调试代码时,这些方法是可用的好工具。

仍然有几种方法我没有谈论,由于他们的 API 依然在变更。具体能够阅读 MDN Web APIWHATWG 规范

developer.mozilla.org/en/docs/Web…


掘金翻译计划 是一个翻译优质互联网技术文章的社区,文章来源为 掘金 上的英文分享文章。内容覆盖 AndroidiOSReact前端后端产品设计 等领域,想要查看更多优质译文请持续关注 掘金翻译计划

相关文章
相关标签/搜索