~ Node.js 全局变量
JavaScript 中有一个特殊的对象,称为全局对象;其所有属性可以在程序的任何地方被访问,即全局变量。
- 在浏览器运行环境中,通常 window 是全局对象
- 在 Node.js 中,全局对象是 global。也就是说,所有全局变量( 除 global 外 ),都是 global 对象的属性。
global
在 Node.js 中,我们可以直接访问 global 的属性,而不需要在应用中包含它。
global 对象,最根本的作用就是:作为全局变量的宿主。
// 代码示例 console.log(process.argv); [ '/Users/admin/.nvm/versions/node/v15.3.0/bin/node', // node运行环境的全路径 '/Users/admin/webpiece/Project/test/test/app.js' // 正在执行的JS文件的全路径 ] console.log(process.arch); // 打印当前系统的架构(x64/x86/arm64)
Buffer
Buffer 类的实例( 对象 ),类似于整数数组,除了其是大小固定的、且在 V8 堆外分配物理内存。
可以这样理解:
- Buffer 的大小在其创建时就已确定,且不能调整大小。
- 由于 Buffer 太过常见,Node 在进程启动时就已经加载了它,并将其放在全局对象( global )上。
所以,在使用 Buffer 时,无须通过 require() 即可直接使用。
[1] 静态方法
- Buffer.isEncoding(encoding) 判断是否支持该编码
- Buffer.isBuffer(obj) 判断是否为 Buffer
- Buffer.byteLength(string[,encoding]) 返回字符串的实际字节长度,默认 utf8
- Buffer.concat() 将一组 Buffer 对象合并为一个 Buffer 对象
...
const buf1 = Buffer.from('this is a tést'); const buf2 = Buffer.from('123'); const buf3 = Buffer.concat([buf1,buf2]); console.log(buf3.toString()); // this is a tést123
[2] 实例化
Node.js v6 之前的版本中,,Buffer 实例是通过 Buffer 构造函数创建的,它根据提供的参数返回不同的 Buffer
而,新版本的 Node.js 则提供了对应的方法:
- Buffer.alloc(size) 分配一个大小为 size 字节的新 Buffer
let buf = Buffer.alloc(5); console.log(buf); // <Buffer 00 00 00 00 00>
- Buffer.from(string[,encoding]) 创建一个包含 string 的新 Buffer
// encoding,字符编码,默认为utf8 const buf1 = Buffer.from('this is a tést'); console.log(buf1.toString()); // this is a tést
[3] 实例方法
- buf.write(string) // 将指定的字符串 string 写入到 buf 中;返回<integer> 已写入的字节数
const buf = Buffer.alloc(256); const len = buf.write('\u00bd + \u00bc = \u00be'); console.log(`${len} 个字节: ${buf.toString()}`); // 12 个字节: ½ + ¼ = ¾
- buf.slice([start[,end]]) // 返回一个新的(截取) Buffer,由 start 和 end 索引进行偏移和裁剪
let buf = Buffer.from('hello'); let buf1 = buf.slice(1,3); console.log(buf.toString()); // hello console.log(buf1.toString()); // el console.log(buf.toJSON()); // { type: 'Buffer', data: [ 104, 101, 108, 108, 111 ] }
- buf.toString() // 将 buf 解码成字符串
- buf.toJson() // 返回 buf 的 JSON 格式。
该方法不需要显式调用,当 JSON.stringify 方法调用的时候会自动调用 toJSON 方法