技术改变生活

Technology changes life,Life-long learning

Node.js(五)global全局变量

global是Node.js中的全局命名空间对象,与浏览器不同,浏览器中顶层作用域是全局作用域,而Node.js中顶层作用域不是全局作用域。

看起来是全局变量实际不是的变量


有一些变量仅存在于模块范围内,这些变量在所有模块中都提供,所以看起来像是全局的,但实际不是。

  • __dirname
  • __filename
  • exports
  • module
  • require()

Buffer类(缓冲器)


Buffer 类是一个全局变量,使用时无需 require(‘buffer’).Buffer
Buffer 类用于在 TCP 流或文件系统操作等场景中处理字节流。
Buffer 类的实例类似于整数数组,大小是固定的,在 V8 堆外分配物理内存。 Buffer 的大小在创建时确定,且无法改变。
Buffer是八位字节组成的数组,可以有效的在JS中存储二进制数据。

api

返回:

《Node.js(五)global全局变量》

返回结构

初始化,使用–zero-fill-buffers 命令行选项

为了安全起见,在创建Buffer的时候,通常都需要初始化,可以使用 --zero-fill-buffers 命令行选项来初始化,即将值初始化填充为0。
使用 --zero-fill-buffers 命令行选项时,new Buffer(size)Buffer.allocUnsafe()Buffer.allocUnsafeSlow()new SlowBuffer(size) 返回的 Buffer 在创建时会用 0 填充

《Node.js(五)global全局变量》

初始化Buffer

注意:当调用 Buffer.allocUnsafe()Buffer.allocUnsafeSlow() 时,分配的内存是未初始化的(没有用 0 填充)。
这样虽然分配内存很快,但是分配的内存可能包含有旧数据,如果没有重写内存,那读取Buffer的时候,就会使旧数据泄露。

字符编码

当 Buffer 存入或取出字符串时,需要指定字符编码
Node.js 支持的字符编码有:

  • ‘ascii’ – 仅支持 7 位 ASCII 数据。
  • ‘utf8’ – 多字节编码的 Unicode 字符。
  • ‘utf16le’ – 2 或 4 个字节,小端序编码的 Unicode 字符。支持代理对(U+10000 至 U+10FFFF)。
  • ‘ucs2’ – ‘utf16le’ 的别名。
  • ‘base64’ – Base64 编码。
  • ‘latin1’ – 将 Buffer 编码成单字节编码的字符串。
  • ‘binary’ – ‘latin1’ 的别名。
  • ‘hex’ – 将每个字节编码成两个十六进制字符。

timer(定时器)


timer模块定义了一些定时器函数,暴露在全局,定时器函数都是全局变量,不需要调用require(‘timers’) 来使用 API。
Node.js 中的定时器函数实现了与 Web 浏览器提供的定时器 API 类似的 API,但是使用了不同的内部实现(基于 Node.js 事件循环构建)。

Immediate 类

setImmediate()返回,传给clearImmediate()取消。

  • setImmediate(callback[, …args]):预定在 I/O 事件的回调之后立即执行的 callback。当多次调用 setImmediate() 时,callback 函数将按照创建它们的顺序排队等待执行。
  • clearImmediate(immediate):取消由 setImmediate() 创建的 Immediate 对象。
Timeout 类

此对象在内部创建,并从 setTimeout()setInterval() 返回。 它可以传给 clearTimeout()clearInterval() 以取消计划的操作

  • setInterval(callback, delay[, …args]):预定每隔 delay 毫秒重复执行 callback

  • setTimeout(callback, delay[, …args]):预定在 delay 毫秒之后执行一次性的 callback。可能不会精确地在 delay 毫秒时调用 callback。 Node.js 不保证回调被触发的确切时间,也不保证它们的顺序。 回调会在尽可能接近指定的时间调用。

  • clearInterval(timeout):取消由 setInterval() 创建的 Timeout 对象。

  • clearTimeout(timeout):取消由 setTimeout() 创建的 Timeout 对象

console


console 模块提供了一个简单的调试控制台,类似于 Web 浏览器提供的 JavaScript 控制台,导出了Console类(包含 console.log()、console.error() 和 console.warn() 等方法)和全局的console实例,配置为写入 process.stdoutprocess.stderr。 使用时无需调用 require('console')

console.assert(value[, …message])

一个简单的断言测试,用于验证 value 是否为真。 如果不是,则记录 Assertion failed。 如果提供 message,则通过传入所有消息参数来使用 util.format() 格式化错误消息。 输出用作错误消息。

console.clear()

console.clear() 的具体操作可能因操作系统和终端类型而异。 对于大多数 Linux 操作系统,console.clear() 的操作与 clear 的 shell 命令类似。 在 Windows 上,console.clear() 将仅清除当前终端视图中 Node.js 二进制文件的输出。

console.error([data][, …args])

用换行符打印到 stderr。

console.info([data][, …args])
console.log([data][, …args])
console.table(tabularData[, properties])

使用 tabularData(或使用 properties)的属性列和 tabularData 的行来构造一个表并记录它

输出:

《Node.js(五)global全局变量》

console.table

console.time([label])

启动一个计时器,用以计算一个操作的持续时间。 计时器由一个唯一的 label 标识。 当调用 console.timeEnd() 时,可以使用相同的 label 来停止计时器,并以毫秒为单位将持续时间输出到 stdout。 计时器持续时间精确到亚毫秒。

console.timeEnd([label])

停止先前通过调用 console.time() 启动的计时器,并打印结果到 stdout

输出:

《Node.js(五)global全局变量》

console.time

process


process 对象是一个全局变量,它提供有关当前 Node.js 进程的信息并对其进行控制。 作为一个全局变量,无需使用 require()。
process对象是EventEmitter的实例

EventEmitter(EventEmitter类):Emitter表示触发器,大多数Node.js核心API构建于异步事件驱动架构,其中有某些类型的对象(就是Emitter,也叫做触发器)会触发命名事件来调用函数(也叫做监听器)。以上的process对象就是一个触发器,也可以说是监听器。
所有能触发事件的对象都是EventEmitter类的实例。这些对象有一个eventEmitter.on()函数,用于将一个或多个函数绑定到命名事件上。事件命名通常采用驼峰式命名。

process对象设定了一些命名事件的处理:

  • ‘beforeExit’ 事件:当 Node.js 清空其事件循环并且没有其他工作要安排时,会触发 ‘beforeExit’ 事件
  • ‘exit’ 事件:当 Node.js 进程因调用process.exit()或者事件循环完毕将退出时,则会触发 ‘exit’ 事件

在调用 ‘exit’ 事件监听器之后,Node.js 进程将立即退出,从而导致在事件循环中仍排队的任何其他工作被放弃

  • ‘message’ 事件:如果使用 IPC 通道衍生 Node.js 进程,则只要子进程收到父进程使用 childprocess.send() 发送的消息,就会触发 'message' 事件
  • ‘warning’ 事件:任何时候Node.js发出进程告警,都会触发’warning’事件

process还有一些属性或方法(只记录部分):

  • process.argv:一个数组,其中包含当启动 Node.js 进程时传入的命令行参数
  • process.config:一个Javascript对象。此对象描述了用于编译当前Node.js执行程序时涉及的配置项信息
  • process.env:包含用户环境的对象
  • process.abort():使Node.js进程立即结束
  • process.exit():以退出状态 code 指示 Node.js 同步地终止进程。 如果省略 code,则使用成功代码 0process.exitCode 的值(如果已设置)退出。 在调用所有的 'exit' 事件监听器之前,Node.js 不会终止
  • process.kill(pid[, signal]):将signal发送给pid标识的进程
  • process.send(message[, sendHandle[, options]][, callback]):如果Node.js进程是通过进程间通信产生的,那么,process.send()方法可以用来给父进程发送消息。 接收到的消息被视为父进程的ChildProcess对象上的一个'message'事件。

原文始发于:Node.js(五)global全局变量

点赞