在nodejs 环境中 index.js 引用 a.js ,在index.js 设置全局变量 global.xxx = 'xxx' ,被引用的a.js 也读取全局变量xxx
但是在浏览器环境下,全局变量在 window。不同的环境需要判断,所以CMAScript 2020 出现了一个globalThis
全局变量,在nodejs环境会自动切换成global 。
nodejs内置全局API
__dirname __filename 只能在cjs使用 esm规范没有这两个全局变量
__dirname
它表示当前模块的所在目录
的绝对路径
__filename 它表示当前模块文件
的绝对路径,包括文件名和文件扩展名
process
1、process.argv 返回包含命令行参数的数组 第一个元素是Node.js的执行路径,第二个元素是当前执行的JavaScript文件的路径,之后的元素是传递给脚本的命令行参数。
2、process.env : 这是一个包含当前环境变量的对象。您可以通过process.env
访问并操作环境变量
但是不能改变全局的环境变量,仅在当前语言环境中使用
3、process.cwd()
: 这个方法返回当前工作目录的路径。
4、process.on(event, listener)
: 用于注册事件监听器。您可以使用process.on
监听诸如exit
、uncaughtException
等事件,并在事件发生时执行相应的回调函数。
5、process.exit([code])
: 用于退出当前的Node.js进程。您可以提供一个可选的退出码作为参数
6、process.pid
: 这个属性返回当前进程的PID(进程ID)
这些只是process
对象的一些常用属性和方法,还有其他许多属性和方法可用于监控进程、设置信号处理、发送IPC消息等。
需要注意的是,process
对象是一个全局对象,可以在任何模块中直接访问,无需导入或定义。
Buffer
在 Node.js 中,Buffer 类用于创建一个专门存放二进制数据的缓存区。由于 JavaScript 语言自身只有字符串数据类型,没有二进制数据类型,因此在处理像 TCP 流或文件流时,必须使用到二进制数据。Buffer 类是随 Node 内核一起发布的核心库,可以让 Node.js 处理二进制数据。
1、创建 Buffer
实例:
Buffer.alloc(size[, fill[, encoding]])
: 创建一个指定大小的新的Buffer
实例,初始内容为零。fill
参数可用于填充缓冲区,encoding
参数指定填充的字符编码。.
//创建一个长度为4096字节(0x1000十六进制)的缓冲区,并用十六进制数0x00填充它 console.log(Buffer.alloc( 0x1000, 0x00, 'hex' ))
Buffer.from(input[, encoding]) 是 Node.js 中用于从不同类型的数据创建 Buffer
实例的方法
-
input:用于创建 Buffer 的数据,可以是:
- 一个 字符串(将被编码为 Buffer)。
- 一个 数组 或 类数组对象。
- 一个 ArrayBuffer。
- 一个 现有的 Buffer(将被克隆)
-
encoding(可选):指定编码方式,用于将字符串转换为 Buffer。常见的编码方式包括:
'utf8'
(默认)'ascii'
'base64'
'hex'
const buf1 = Buffer.from('你好,世界!', 'utf8'); //从字符串创建 const buf2 = Buffer.from([1, 2, 3, 4]);//从数组创建: const buf3 = Buffer.from(buf2); //从现有 Buffer 创建(克隆): const ab = new ArrayBuffer(10); //从 ArrayBuffer 创建 const buf4 = Buffer.from(ab);
2、读取和写入数据:
buffer[index]
: 通过索引读取或写入Buffer
实例中的特定字节。buffer.length
: 获取Buffer
实例的字节长度。
const buf2 = Buffer.from([1, 2, 3, 4,"???","aazxd"]) console.log(buf2[0]) // 1 console.log(buf2.length) // 7
buffer.toString([encoding[, start[, end]]])
: 将Buffer
实例转换为字符串。
const buffer = Buffer.from('Hello, World!', 'utf8');console.log(buffer.toString('utf8'))//Hello, World! console.log(buffer.toString('utf8', 0, 5)) //Hello const buffer2 = Buffer.from('68656c6c6f', 'hex'); // '68656c6c6f' 是 'hello' 的十六进制表示 console.log(buffer2.toString('utf8')); //hello
buffer.toJSON()
用于将 Buffer
对象转换为 JSON 格式 返回的 JSON 对象包含一个 type
属性和一个 data
属性。
{type: 'Buffer',data: <Buffer的数据数组> }
将 Buffer 转换为 JSON: const buffer = Buffer.from('Hello, World!'); const json = buffer.toJSON(); console.log(json); // 输出: { type: 'Buffer', data: [ 72, 101, 108, 108, 111, 44, 32, 87, 111, 114, 108, 100, 33 ] }
buffer.slice([start[, end]])
: 返回一个新的Buffer
实例,其中包含原始Buffer
实例的部分内容。
其他:
Buffer.isBuffer(obj)
: 检查一个对象是否是Buffer
实例。Buffer.concat(list[, totalLength])
: 将一组Buffer
实例或字节数组连接起来形成一个新的Buffer
实例。