来源:Node.js

全局变量

在Nodejs中使用global定义全局变量,global aaa="aaa"

1
2
3
4
5
6
7
// require放在这里,child.js无法读取全局变量name
// require('./child.js')
global.name="yajue"
// require放在这里,child.js可以读取全局变量name
require('./child.js')

// 因为JavaScript是从上往下一条条执行的

在浏览器中定义的全局变量都存于window,而Nodejs存于global,不同的环境需要判断

于是ECMAScript 2020推出了globalThis全局变量,Nodejs环境中等于global ,浏览器环境中则等于window

全局API

Nodejs没有DOM和BOM,而ECMAScript API都能在Nodejs全局使用,例如setTimeoutsetIntervalPromiseMathconsole(被重写)、Datefetch( node v18 )等

除此之外还有Nodejs环境自己的全局API

  • __dirname:表示当前模块所在目录的绝对路径
  • __filename:表示当前模块文件的绝对路径,包括文件名和文件拓展名
  • requiremodule:见模块化
  • process:进程对象
    • process.argv:一个包含命令行参数的数组
      • 第一个元素:Nodejs的执行路径
      • 第二个元素:当前执行的JavaScript文件的路径
      • 之后的元素:传递给脚本(node命令)的命令行参数
    • process.env:一个包含当前环境变量的对象,可以访问、操作环境变量
    • process.cwd():返回当前工作目录的路径
    • process.on(event,listener):注册进程事件监听器,可以监听诸如exituncaughtException等事件,并在事件发生时执行回调
    • process.exit([code]):退出当前的Nodejs进程,参数是可选的退出码
    • process.pid当前进程的进程ID
    • 还有其他一些可以用于监控进程、设置信号处理、发送IPC消息等的属性和方法
  • Buffer:缓冲区
    • 创建Buffer实例
      • Buffer.alloc(size[, fill[, encoding]]):创建一个指定大小的新Buffer实例,初始内容为零,fill参数可填充缓冲区,encoding参数指定填充的字符编码
      • Buffer.from(array):创建一个包含给定数组的Buffer实例
      • Buffer.from(string[, encoding]):创建一个包含给定字符串的Buffer实例
      • Nodejs 6.0以上删除了Buffer构造函数的使用,所以应该使用上述方法创建Buffer实例
    • 读取和写入数据
      • buffer[index]:通过索引读取或写入Buffer实例中的特定字节
      • buffer.length:获取Buffer实例的字节长度
      • buffer.toString([encoding[, start[, end]]]):将Buffer实例转换为字符串
    • 转换数据
      • buffer.toJSON():将Buffer实例转换为JSON对象
      • buffer.slice([start[, end]]):返回一个新的Buffer实例,其中包含原始Buffer实例的部分内容
    • 其他方法
      • Buffer.isBuffer(obj):检查一个对象是否是Buffer实例
      • Buffer.concat(list[, totalLength]):将一组Buffer实例或字节数组连接起来形成一个新的Buffer实例
    • Buffer在处理文件、网络通信、加密和解密等操作中非常有用,尤其是在需要处理二进制数据时