文章目录
什么是node.js
- Node.js 是一个开源与跨平台的 JavaScript 运行时环境。 它是一个可用于几乎任何项目的流行工具!
- Node.js 在浏览器外运行 V8 JavaScript 引擎(Google Chrome 的内核)。 这使 Node.js
表现得非常出色。 - Node.js 应用程序运行于单个进程中,无需为每个请求创建新的线程。 Node.js 在其标准库中提供了一组异步的 I/O
原生功能(用以防止 JavaScript 代码被阻塞),并且 Node.js
中的库通常是使用非阻塞的范式编写的(从而使阻塞行为成为例外而不是规范)。
当 Node.js 执行 I/O 操作时(例如从网络读取、访问数据库或文件系统),Node.js 会在响应返回时恢复操作,而不是阻塞线程并浪费 CPU 循环等待。 - 这使 Node.js 可以在一台服务器上处理数千个并发连接,而无需引入管理线程并发的负担(这可能是重大 bug 的来源)。
- Node.js 具有独特的优势,因为为浏览器编写 JavaScript
的数百万前端开发者现在除了客户端代码之外还可以编写服务器端代码,而无需学习完全不同的语言。 - 在 Node.js 中,可以毫无问题地使用新的 ECMAScript 标准,因为不必等待所有用户更新其浏览器,你可以通过更改
Node.js 版本来决定要使用的 ECMAScript 版本,并且还可以通过运行带有标志的 Node.js 来启用特定的实验中的特性。
Node.js 与浏览器的区别
- 浏览器和 Node.js 均使用 JavaScript 作为其编程语言。
- 构建运行于浏览器中的应用程序与构建 Node.js 应用程序完全不同。
- 尽管都是 JavaScript,但一些关键的差异使体验相当不同。
- 从广泛使用 JavaScript 的前端开发者的角度来看,Node.js
应用程序具有巨大的优势:使用单一语言轻松编程所有一切(前端和后端)。 - 你会拥有巨大的机会,因为全面、深入地学习一门编程语言并通过使用同一语言完成
web(无论是在客户端还是在服务器)上的所有工作是非常困难的,你会处于独特的优势地位。 - 不同的还有生态系统。
- 在浏览器中,大多数时候做的是与 DOM 或其他 Web 平台 API(例如 Cookies)进行交互。 当然,那些在 Node.js
中是不存在的。 没有浏览器提供的 document、window、以及所有其他的对象。 - 而且在浏览器中,不存在 Node.js 通过其模块提供的所有不错的 API,例如文件系统访问功能。
- 另一个很大的不同是,在 Node.js 中,可以控制运行环境。
除非构建的是任何人都可以在任何地方部署的开源应用程序,否则你能知道会在哪个版本的 Node.js 上运行该应用程序。
与浏览器环境(你无法选择访客会使用的浏览器)相比起来,这非常方便。 - 这意味着可以编写 Node.js 版本支持的所有现代的 ES6-7-8-9 JavaScript。
- 由于 JavaScript 发展的速度非常快,但是浏览器发展得慢一些,并且用户的升级速度也慢一些,因此有时在 web 上,不得不使用较旧的
JavaScript / ECMAScript 版本。 - 可以使用 Babel 将代码转换为与 ES5 兼容的代码,再交付给浏览器,但是在 Node.js 中,则不需要这样做。
- 另一个区别是 Node.js 使用 CommonJS 模块系统,而在浏览器中,则还正在实现 ES 模块标准。
- 在实践中,这意味着在 Node.js 中使用 require(),而在浏览器中则使用 import。
V8 JavaScript 引擎
- V8 是为 Google Chrome 提供支持的 JavaScript 引擎的名称。 当使用 Chrome 进行浏览时,它负责处理并执行
JavaScript。 - V8 提供了执行 JavaScript 的运行时环境。 DOM 和其他 Web 平台 API 则由浏览器提供。
- 很酷的是,JavaScript 引擎独立于托管它的浏览器。 此关键的特性推动了 Node.js 的兴起。 V8 于 2009 年被选为为
Node.js 提供支持的引擎,并且随着 Node.js 的爆炸性发展,V8 成为了现在为大量的服务器端代码(使用 JavaScript
编写)提供支持的引擎。 - Node.js 的生态系统非常庞大,得益于此,V8 还为桌面应用程序(通过 Electron 等项目)提供支持。
基本操作
从命令行运行 Node.js 脚本
运行 Node.js 程序的常规方法是,运行全局可用的 node 命令(已安装 Node.js)并传入要执行的文件的名称。
比如主 Node.js 应用程序文件是 app.js,则可以通过键入以下命令调用它:
node app.js
示例:
var app = "啥都没有";
console.log(app);
当运行命令时,请确保位于包含 app.js 文件的目录中。
如何从 Node.js 程序退出
process 核心模块提供了一种便利的方法,可以以编程的方式退出 Node.js 程序:process.exit()。
当 Node.js 运行此行代码时,进程会被立即强制终止。
默认情况下,退出码为 0,表示成功。 不同的退出码具有不同的含义,可以在系统中用于程序与其他程序的通信。
process.exit(1)
有关退出码的信息,详见http://nodejs.cn/api/process.html#process_exit_codes
也可以设置 process.exitCode 属性:
process.exitCode = 1
使用控制台模块的基础输出
Node.js 提供了 console 模块,该模块提供了大量非常有用的与命令行交互的方法。
它基本上与浏览器中的 console 对象相同。
可
- console.log(),该方法会打印传入到控制台的字符串。
- console.clear() 会清除控制台(其行为可能取决于所使用的控制台)。
- console.count() 方法会对打印的字符串的次数进行计数,并在其旁边打印计数
- console.trace()这会打印堆栈踪迹。
- 可以使用 time() 和 timeEnd() 轻松地计算函数运行所需的时间
- console.error 会打印到 stderr 流
const x = 'x'
const y = 'y'
console.log(x, y)
//Node.js 会全部打印出来。
以通过传入变量和格式说明符来格式化用语。
- %s 会格式化变量为字符串
- %d 会格式化变量为数字
- %i 会格式化变量为其整数部分
- %o 会格式化变量为对象
例如:
console.log('我的%s已经%d岁', '猫', 2);
元素计数
const x = 1
const y = 2
const z = 3
console.count(
'x 的值为 ' + x + ' 且已经检查了几次?'
)
console.count(
'x 的值为 ' + x + ' 且已经检查了几次?'
)
console.count(
'y 的值为 ' + y + ' 且已经检查了几次?'
)
计算函数运行所需的时间
const doSomething = () => console.log('测试')
const measureDoingSomething = () => {
console.time('doSomething()')
//做点事,并测量所需的时间。
doSomething()
console.timeEnd('doSomething()')
}
measureDoingSomething()