## 7.在控制台上打印信息(`console.*`)
> 原文: [http://exploringjs.com/impatient-js/ch_console.html](http://exploringjs.com/impatient-js/ch_console.html)
>
> 贡献者:[Hunter-liu](https://github.com/lq920320)
打印是不属于 JavaScript 语言标准的功能。但是,我们在这里进行的所有操作,浏览器和 Node.js 都是支持的。
打印意味着“在控制台上显示内容”,其中“控制台”是浏览器控制台或运行 Node.js 的终端。
完整的`console.*` API 在 [MDN 的网页](https://developer.mozilla.org/en-US/docs/Web/API/console) 以及 [Node.js 官网](https://nodejs.org/api/console.html)都有相关文档。接下来我们将快速浏览以下两个操作:
- `console.log()`
- `console.error()`
### 7.1. 打印值:`console.log()`(标准输出)
此操作有两种形式:
```js
console.log(...values: any[]): void
console.log(pattern: string, ...values: any[]): void
```
#### 7.1.1. 打印多个值
第一中形式在控制台上打印(文本)值:
```js
console.log('abc', 123, true);
// Output:
// abc 123 true
```
`console.log()` 始终在末尾打印换行符。因此,如果你直接调用而不加任何参数,它只会打印一个换行符。
#### 7.1.2. 打印替换的字符串
第二种形式可以进行替换字符串:
```js
console.log('Test: %s %j', 123, 'abc');
// Output:
// Test: 123 "abc"
```
你可以用于替换的一些指令:
- `%s`将相应的值转换为字符串输出。
```js
console.log('%s %s', 'abc', 123);
// Output:
// abc 123
```
- `%o`将被替换的对象转为字符串形式输出。
```js
console.log('%o', {foo: 123, bar: 'abc'});
// Output:
// { foo: 123, bar: 'abc' }
```
- `%j`将被替换的值转换为 JSON 字符串输出。
```js
console.log('%j', {foo: 123, bar: 'abc'});
// Output:
// {"foo":123,"bar":"abc"}
```
- `%%`插入一个`%`。
```js
console.log('%s%%', 99);
// Output:
// 99%
```
### 7.2. 打印错误信息:`console.error()`(标准错误)
`console.error()`与`console.log()`的作用相同,但它的日志内容被视为错误信息。对于 Node.js,这意味着在 Unix 上输出的是 stderr(标准错误) 而不是 stdout(标准输出)。
### 7.3. 通过`JSON.stringify()`打印嵌套对象
[`JSON.stringify()`](/docs/50.md#4131-jsonstringifyvalue-replacer-space) 偶尔用于打印嵌套对象:
```js
console.log(JSON.stringify({first: 'Jane', last: 'Doe'}, null, 2));
```
输出:
```js
{
"first": "Jane",
"last": "Doe"
}
```
- I.背景
- 1.关于本书(ES2019 版)
- 2.常见问题:本书
- 3. JavaScript 的历史和演变
- 4.常见问题:JavaScript
- II.第一步
- 5.概览
- 6.语法
- 7.在控制台上打印信息(console.*)
- 8.断言 API
- 9.测验和练习入门
- III.变量和值
- 10.变量和赋值
- 11.值
- 12.运算符
- IV.原始值
- 13.非值undefined和null
- 14.布尔值
- 15.数字
- 16. Math
- 17. Unicode - 简要介绍(高级)
- 18.字符串
- 19.使用模板字面值和标记模板
- 20.符号
- V.控制流和数据流
- 21.控制流语句
- 22.异常处理
- 23.可调用值
- VI.模块化
- 24.模块
- 25.单个对象
- 26.原型链和类
- 七.集合
- 27.同步迭代
- 28.数组(Array)
- 29.类型化数组:处理二进制数据(高级)
- 30.映射(Map)
- 31. WeakMaps(WeakMap)
- 32.集(Set)
- 33. WeakSets(WeakSet)
- 34.解构
- 35.同步生成器(高级)
- 八.异步
- 36. JavaScript 中的异步编程
- 37.异步编程的 Promise
- 38.异步函数
- IX.更多标准库
- 39.正则表达式(RegExp)
- 40.日期(Date)
- 41.创建和解析 JSON(JSON)
- 42.其余章节在哪里?