2022/07/18 Node.Js_Day1
# 2022/07/18 Node.Js_Day1
### 什么是Node.js
`Node.js`是一个开源的和跨平台的`javascript`运行环境,允许`javascript`脚本运行在服务端.实现了`ECMAScript`和`WebAssembly`规范
**`Node.js`的特点:**
1. 单进程允许,无需为每个请求创建新线程. ---> `Node.js`在其标准库中提供了一组异步`I/O`原语,可防止`JavaScript`代码阻塞
2. `Node.js`执行`I/O`操作时,例如从网络读取、访问数据库或文件系统,而不是阻塞线程并浪费`CPU`周期等待,`Node.js`将在响应返回时恢复操作 ---> 单线程
#### ECMScript 2015(ES6)
**针对`V8`引擎构建的**
**什么是`V8`引擎?**
1. `Google`的开源高性能`JavaScript`和`WebAssembly`引擎.用`C++`编写.它用于`Chrome`和`Node.js`等
2. `JavaScript`引擎,即它解析和执行`JavaScript`代码
**`V8`的特点:**
1. 实现了`ECMAScript`和`WebAssembly` ---> `ECMAScript`(`javascript`的使用标准)和`WebAssembly`是一套规范,一套关于函数、类等这些内容的规范.
2. `V8`编译和执行`JavaScript`源代码.处理对象的内存分配.垃圾收集不再需要的对象.
3. `V8`允许任何`C++`应用程序向`JavaScript`代码公开其自己的对象和函数
`ECMAScript2015(ES6)`功能将被分为三个部分`shipping`,`staged`和`in progress`
- `shipping` ---> `V8`引擎中最稳定的.转变成`Node.Js`默认.不会需要任何运行时标记
- `Staged` ---> 将要完成的特性.需要`--harmony`标记
- `In progress` ---> 这些特性可以通过各自单独的`harmony`标记被激活使用.除非为了测试用途,否则绝不鼓励这样做.
**关键点:**
`Node.js`提供了一个简单的方法以列出所有依赖项,以及通过`process`全局对象 ---> 获取相关版本号:
`node -p process.versions.v8`
### Node.js和浏览器的区别
**区别:**
1. `Node.js`没有`document`,`window`和浏览器提供的所有其他对象
2. `Node.js`当中提供了与文件系统交互的`API` ---> `Node`包括了`V8`引擎(解析和执行`js`的代码)和内置`API`
#### 退出Node
`Node`的全局对象`process`下调用`exit()`方法可以退出`node`环境 ---> 任何待处理的回调、任何仍在发送的网络请求、任何文件系统访问或写入或的进程`stdout-stderr`都将立即被不正常地终止
#### Node.js读取环境变量
`Node.js`的`process`核心模块提供了`env`托管进程启动时设置的所有环境变量的属性
##### 配置环境变量
可以在当前项目创建文件,运行时通过`dotenv`加载`.env`文件 ---> 读取会读取配置文件的值类型
`
USER_ID = "239482"
USER_KEY = "foobar"
`
**使用:**
`
require('dotenv').config();
`
#### Node.js REPL
**什么是`REPL`?**
- `Read Evaluate Print Loop`,它是一个编程语言环境(基本上是一个控制台窗口),将单个表达式作为用户输入,并在执行后将结果返回到控制台
**示例值:**
`
console.log("test")
test
undefined
`
第一个值`test`是我们告诉控制台打印的输出,然后得到`undefinedrunning`的返回值`console.log()`
**`Node.js`通过`REPL`的形式可以展示出类当中的属性和方法**
#### Node.js 从命令行接收参数
**`Node`如何在命令行中检索参数和对象:**
1. 使用`Node.js`中的内置对象`process`
2. 命令后调用参数的数组`argv`属性
3. 第一个元素是`node`命令的完整路径,第二个元素是正在执行的文件的完整路径.所有其他的参数都从第三个位置开始出现.
`
process.argv.forEach((val, index) => {
console.log(`${index}: ${val}`);
}
`
**可以通过切片的形式只获得第二个参数:**
`
const args = process.argv.slice(2);
`
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构