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);
`

 

posted @   俊king  阅读(24)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
点击右上角即可分享
微信分享提示