小技巧: 在 VScode 中编辑 Node 代码只能提示设置
/* 安装方式: NPM */npm initnpm i -D @types/node/* or *//* 安装方式: yarn */yarnyarn add @types/node --dev
一. Node 的全局对象
1. 全局对象
| 浏览器环境全局对象 | window |
|---|---|
| Node 环境全局对象 | global |
2. 全局对象区别
- 浏览器 window 全局对象
- 全局对象的属性可以直接使用, 例如: history, setTimeout() 等
- Node 环境 global 全局对象
- global 全局对象下面还有个属性 global
- 全局对象下的所有属性可以直接使用, 但是全局对象本身是使用了 “global.global = global” 的方式进行处理, 与 window 全局对象的处理方式一致, 其实我们访问的 window 是全局对象属性下的 window; Node 中的 global 全局对象与其一致
3. Node 全局对象 global 常用的属性
setTimeout()
- 定时器
- window 中返回的是一个数字, global 中返回的是一个对象
- 清除定时器的方式与 window 一致 clearTimeout
setTimeout(() => {}, 1000);
setInterval()
- 定时器
- window 中返回的是一个数字, global 中返回的是一个对象
- 清除定时器的方式与 window 一致 clearInterval
setInterval(() => {}, 0);
setImmediate()
- 立即执行的
- 类似于 setTimeout(() => {}, 0); 但是 setImmediate 肯定有区别于 setTimeout, 要前置了解区别需要理解 Node 的整个生命周期, 目前可以理解为类似 setTimeout(() => {}, 0);
setImmediate(() => { }, 0);
console
- 控制台输出
- 与浏览器一致, window.console 是在浏览器控制台输出, global.console 是在系统控制台输出.
- __dirname
- 获取当前模块所在的目录
- 并非 global 的属性
- __filename
- 获取当前模块的文件路径
- 并非 global 的属性
Buffer
- 类似于 ES6 中的”类型化数组”, 原本有 “类型化数组” 的情况下是不需要 Buffer 的. 但是 Node 早于 ES6 存在. 在当时没有 “类型化数组” 的情况下, 需要满足此需求, 所以 Node 就造了一个 Buffer.
- 在 ES6 “类型化数组” 出来了之后, Buffer 做了一件很简单的事情. Buffer 继承自 ES6 “类型化数组” UInt8Array.
- UInt8Array 中的每一个数字, 是 0-255 的一个数字
- 计算机中存储的基本单位是: 字节
- Buffer 可以记录每一个字节的数字
const buffer = Buffer.from('abcdefg','utf-8')console.log(buffer); // <Buffer 61 62 63 64 65 66 67>
使用时 || 输出时可能需要用十六进制表示
process
cwd()
- 返回当前 NodeJS 进程的工作目录 ( 获取当前执行的 Node 命令的命令行路径 )
- 绝对路径
console.log(`当前命令行:>>`,process.cwd()); // 当前命令行:>> D:\Develop\demo\Node
exit()
- 强制退出当前 Node 进程
- 可传入退出代码, 0表示退出成功, 默认为0
- ```javascript setTimeout(() => { console.log(‘abc’); }, 1000);
// 直接结束进程, 不执行console.log(‘abc’) process.exit()
- argv- String[]- 获取命令行中的所有参数-```javascript// 步骤1: 在node.js文件中写入代码console.log(process.argv);// 步骤2: 在系统控制台中输入 node 文件名 [参数...] 执行node进程PS D:\Develop\demo\Node> node index a b c// 输出['D:\\Develop\\NodeJS\\node.exe', // node 命令的绝对路径'D:\\Develop\\demo\\Node\\index', // index.js 文件的绝对路径'a', // 参数'b', // 参数'c' // 参数]
- platform
- 获取当前的操作系统
- ```javascript console.log(‘当前操作系统:>>’,process.platform); // 当前操作系统:>> win32
// win32 表示平台版本 ( 表示支持 win32 以及 win32 以上平台版本 ), 并不是说系统是32位版本
- kill(pid)- 根据 PID(进程ID) 杀死进程- PID 是操作系统在应用启动的时候自动分配, 不是固定的.-```javascriptprocess.kill(13952); // 杀死 steam 进程
- env
- 获取环境变量
- 例如: “ process.env.NODE_ENV “
- ```javascript console.log(‘环境变量:>>’, process.env); /*
输出:
{
ALLUSERSPROFILE: ‘C:\ProgramData’,
APPDATA: ‘C:\Users\bobo3\AppData\Roaming’,
CHROME_CRASHPAD_PIPE_NAME: ‘\\.\pipe\crashpad_13860_BXTFFZOMTEXDMAQN’,
CommonProgramFiles: ‘C:\Program Files\Common Files’,
‘CommonProgramFiles(x86)’: ‘C:\Program Files (x86)\Common Files’,
CommonProgramW6432: ‘C:\Program Files\Common Files’,
COMPUTERNAME: ‘DESKTOP-D7E1VEH’,
ComSpec: ‘C:\WINDOWS\system32\cmd.exe’,
DriverData: ‘C:\Windows\System32\Drivers\DriverData’,
FPS_BROWSER_APP_PROFILE_STRING: ‘Internet Explorer’,
FPS_BROWSER_USER_PROFILE_STRING: ‘Default’,
HOMEDRIVE: ‘C:’,
HOMEPATH: ‘\Users\bobo3’,
LOCALAPPDATA: ‘C:\Users\bobo3\AppData\Local’,
LOGONSERVER: ‘\\DESKTOP-D7E1VEH’,
NUMBER_OF_PROCESSORS: ‘12’,
NVM_HOME: ‘D:\Develop\nvm1.1.7-setup\nvm’,
NVM_SYMLINK: ‘D:\Develop\NodeJS’,
OneDrive: ‘C:\Users\bobo3\OneDrive’,
OneDriveConsumer: ‘C:\Users\bobo3\OneDrive’,
ORIGINAL_XDG_CURRENT_DESKTOP: ‘undefined’,
OS: ‘Windows_NT’,
Path: ‘D:\Private\VMware\bin\;C:\WINDOWS\system32;C:\WINDOWS;C:\WINDOWS\System32\Wbem;C:\WINDOWS\System32\WindowsPowerShell\v1.0\;C:\WINDOWS\System32\OpenSSH\;D:\System\Bandizip\;D:\Develop\nvm1.1.7-setup\nvm;D:\Develop\NodeJS;C:\Users\bobo3\AppData\Local\Microsoft\WindowsApps;D:\Develop\nvm1.1.7-setup\nvm;D:\Develop\NodeJS;D:\Develop\Microsoft VS Code\bin’,
PATHEXT: ‘.COM;.EXE;.BAT;.CMD;.VBS;.VBE;.JS;.JSE;.WSF;.WSH;.MSC;.CPL’,
PROCESSOR_ARCHITECTURE: ‘AMD64’,
PROCESSOR_IDENTIFIER: ‘Intel64 Family 6 Model 158 Stepping 10, GenuineIntel’,
PROCESSOR_LEVEL: ‘6’,
PROCESSOR_REVISION: ‘9e0a’,
ProgramData: ‘C:\ProgramData’,
ProgramFiles: ‘C:\Program Files’,
‘ProgramFiles(x86)’: ‘C:\Program Files (x86)’,
ProgramW6432: ‘C:\Program Files’,
PSModulePath: ‘C:\Users\bobo3\Documents\WindowsPowerShell\Modules;C:\Program Files\WindowsPowerShell\Modules;C:\WINDOWS\system32\WindowsPowerShell\v1.0\Modules’,
PUBLIC: ‘C:\Users\Public’,
SESSIONNAME: ‘Console’,
SystemDrive: ‘C:’,
SystemRoot: ‘C:\WINDOWS’,
TEMP: ‘C:\Users\bobo3\AppData\Local\Temp’,
TMP: ‘C:\Users\bobo3\AppData\Local\Temp’,
USERDOMAIN: ‘DESKTOP-D7E1VEH’,
USERDOMAIN_ROAMINGPROFILE: ‘DESKTOP-D7E1VEH’,
USERNAME: ‘bobo3’,
USERPROFILE: ‘C:\Users\bobo3’,
windir: ‘C:\WINDOWS’,
TERM_PROGRAM: ‘vscode’,
TERM_PROGRAM_VERSION: ‘1.64.0’,
LANG: ‘zh_CN.UTF-8’,
COLORTERM: ‘truecolor’
}
*/ ```
v8 引擎
setTimeout, setInterval, setImmediate, console 这些属性都是 V8 引擎自带的. 主要都是使用 V8 引擎进行实现的.
