Node.js - 全局对象



Node.js中的全局对象是内置对象。Node.js运行时由许多核心模块组成。要合并任何核心模块的功能,例如 fs 模块或 http 模块(或从 npm 安装的任何外部模块,例如 express 模块),您需要使用 require() 函数加载它们。但是,一些模块、函数、类、变量等可以直接在 JavaScript 代码中使用,而无需使用 require() 函数加载它们。它们被称为全局对象。让我们看一下全局类、变量和函数 Node.js

Buffer 类

Buffer 类是一个全局类,可以在应用程序中访问,而无需导入 Buffer 模块。buffer 类的对象存储原始数据,类似于整数数组,但对应于 V8 堆之外的原始内存分配。

您可以创建一个由 10 个八位字节组成的未启动缓冲区 -


 var buf = new Buffer(10);

也可以从给定数组创建缓冲区对象 -


 var buf = new Buffer([10, 20, 30, 40, 50]);

或从给定的字符串 -


 var buf = new Buffer("Simply Easy Learning", "utf-8");

您可以使用缓冲区执行不同的操作,例如读/写数据、将缓冲区转换为 JSON、缓冲区串联等。

控制台类

一个 Console 类,其中包含 console.log()、console.error() 和 console.warn() 等方法,可用于写入任何Node.js流。全局控制台可以在不调用 require('node:console') 的情况下使用。

以下 REPL 会话显示全局控制台对象的功能


> console.log("Hello World");
Hello World
undefined
> console.error("Some error occurred");
Some error occurred
undefined
> console.warn("This is a warning message!");
This is a warning message!
undefined

Process 对象

流程对象是一个全局对象,尽管它是在流程模块中定义的。它是 EventEmitter 类的一个实例。进程对象提供有关当前进程的信息。借助与此对象关联的许多方法和属性,可以控制当前进程。

Process 对象的属性之一是 argv 数组。它存储传递给节点可执行文件的命令行参数。

数组中的第 0 个元素是节点可执行文件,第一个元素是 javascript 文件,然后是传递的参数。

将以下脚本另存为 你好.js 并从命令行运行它,从命令行向它传递一个字符串参数。


const args = process.argv;

console.log(args);	

const name = args[2];

console.log("Hello,", name);

在终端中,输入


PS D:\nodejs> node hello.js Qikepu
[ 'C:\\nodejs\\node.exe', 'D:\\nodejs\\a.js', 'Qikepu' ]
Hello, Qikepu

process.argv0 属性存储启动时传递的 argv[0] 原始值的只读副本Node.js。

Process 对象的 env 属性存储环境变量。您可以从命令行设置环境变量。将值分配给节点可执行文件名称之前的一个或多个变量。


 USER_ID=101 USER_NAME=admin node app.js

在脚本内部,环境变量可用作 process.env 对象的属性


process.env.USER_ID; // "101"
process.env.USER_NAME; // "admin"

有关当前进程的一些有用信息存储在进程对象的属性中,如以下示例所示。


console.log('Process Architecture:'+process.arch); 	
console.log('Current working directory:'+ process.cwd());
console.log('Process PID: '+process.pid); 	
console.log('Process Platform: '+process.platform); 	
console.log('Process Version: '+process.version); 	

输出

Process Architecture:x64
Current working directory:D:\nodejs
Process PID: 11060
Process Platform: win32
Process Version: v20.9.0

全局定时器功能

Node.js 的 timer 模块定义了用于调度回调的函数。它们可以用作全局函数(无需导入模块)。

setTimeout() 函数用于在指定的持续时间(以毫秒为单位)后运行回调。


function printHello() {
	 	console.log( "Hello, World!");
}

// Now call above function after 2 seconds
setTimeout(printHello, 2000);

clearTimeout() 函数用于停止之前使用 setTimeout() 创建的计时器。

setInterval() 函数用于在指定的持续时间(以毫秒为单位)后重复运行回调。


function printHello() {
	 	console.log( "Hello, World!");
}

// Now call above function after 2 seconds
setInterval(printHello, 2000);

全局变量

__filename

__filename表示正在执行的代码的文件名。这是此代码文件的已解析绝对路径。对于主程序,这不一定是命令行中使用的相同文件名。模块内的值是该模块文件的路径。

使用以下代码创建名为 main.js 的 js 文件 -


// 让我们尝试打印__filename的值
console.log( __filename );

现在运行main.js以查看结果 -

D:\nodejs\main.js

__dirname

__dirname表示当前正在执行的脚本所在的目录的名称。

使用以下代码创建名为 main.js 的 js 文件 -


// 让我们尝试打印__dirname的值
console.log( __dirname );

现在运行main.js以查看结果 -

D:\nodejs

请注意,将给定模块导入 Node.js 运行时的 require() 函数也是一个全局函数。

全局对象

下表提供了我们在应用程序中经常使用的其他对象的列表。更多详情,可以参考官方文档。

模块名称 描述
Console

用于打印有关 stdout 和 stderr 的信息。

Process

用于获取有关当前进程的信息。提供与流程活动相关的多个事件。