小技巧: 在 VScode 中编辑 Node 代码只能提示设置

  1. /* 安装方式: NPM */
  2. npm init
  3. npm i -D @types/node
  4. /* or */
  5. /* 安装方式: yarn */
  6. yarn
  7. yarn 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
      1. setTimeout(() => {}, 1000);
  • setInterval()

    • 定时器
    • window 中返回的是一个数字, global 中返回的是一个对象
    • 清除定时器的方式与 window 一致 clearInterval
      1. setInterval(() => {}, 0);
  • setImmediate()

    • 立即执行的
    • 类似于 setTimeout(() => {}, 0); 但是 setImmediate 肯定有区别于 setTimeout, 要前置了解区别需要理解 Node 的整个生命周期, 目前可以理解为类似 setTimeout(() => {}, 0);
      1. 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 可以记录每一个字节的数字
      1. const buffer = Buffer.from('abcdefg','utf-8')
      2. console.log(buffer); // <Buffer 61 62 63 64 65 66 67>
    • 使用时 || 输出时可能需要用十六进制表示

  • process

    • cwd()

      • 返回当前 NodeJS 进程的工作目录 ( 获取当前执行的 Node 命令的命令行路径 )
      • 绝对路径
        1. console.log(`当前命令行:>>`,process.cwd()); // 当前命令行:>> D:\Develop\demo\Node
    • exit()

      • 强制退出当前 Node 进程
      • 可传入退出代码, 0表示退出成功, 默认为0
      • ```javascript setTimeout(() => { console.log(‘abc’); }, 1000);

// 直接结束进程, 不执行console.log(‘abc’) process.exit()

  1. - argv
  2. - String[]
  3. - 获取命令行中的所有参数
  4. -
  5. ```javascript
  6. // 步骤1: 在node.js文件中写入代码
  7. console.log(process.argv);
  8. // 步骤2: 在系统控制台中输入 node 文件名 [参数...] 执行node进程
  9. PS D:\Develop\demo\Node> node index a b c
  10. // 输出
  11. [
  12. 'D:\\Develop\\NodeJS\\node.exe', // node 命令的绝对路径
  13. 'D:\\Develop\\demo\\Node\\index', // index.js 文件的绝对路径
  14. 'a', // 参数
  15. 'b', // 参数
  16. 'c' // 参数
  17. ]
  • platform
    • 获取当前的操作系统
    • ```javascript console.log(‘当前操作系统:>>’,process.platform); // 当前操作系统:>> win32

// win32 表示平台版本 ( 表示支持 win32 以及 win32 以上平台版本 ), 并不是说系统是32位版本

  1. - kill(pid)
  2. - 根据 PID(进程ID) 杀死进程
  3. - PID 是操作系统在应用启动的时候自动分配, 不是固定的.
  4. -
  5. ```javascript
  6. process.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 引擎进行实现的.