~ 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 方法