在 Node.js 中,Globals
是全局可用的对象和函数,这意味着你可以在任何模块中使用它们,而不需要通过 require()
语句引入。以下是 Node.js 全局对象及其相关属性和方法的详细介绍:
1. __dirname
和 __filename
__dirname
: 返回当前模块文件所在的目录的绝对路径。console.log(__dirname); // 输出:当前文件所在的目录路径
__filename
: 返回当前模块文件的绝对路径。console.log(__filename); // 输出:当前文件的绝对路径
2. console
Node.js 的 console
对象提供了一组简单的打印方法来输出到标准输出和标准错误。
console.log([data][, ...args])
: 用于输出信息到标准输出(stdout)。console.log("Hello, World!"); // 输出:Hello, World!
console.error([data][, ...args])
: 用于输出错误信息到标准错误(stderr)。console.error("An error occurred!"); // 输出错误信息
console.warn([data][, ...args])
: 类似于console.error
,用于输出警告信息。console.info([data][, ...args])
: 类似于console.log
,用于输出普通信息。console.dir(obj[, options])
: 输出一个对象的属性,并可以指定选项(如是否显示隐藏属性)。console.dir({ name: "Alice", age: 25 }, { colors: true });
console.time(label)
和console.timeEnd(label)
: 用于计时操作,常用于性能分析。console.time("loop"); for (let i = 0; i < 1000000; i++) {} console.timeEnd("loop"); // 输出运行时间
3. process
process
是一个全局对象,提供有关当前 Node.js 进程的信息和控制。
process.argv
: 返回一个数组,包含启动 Node.js 进程时传入的命令行参数。console.log(process.argv); // 输出命令行参数列表
process.env
: 返回一个包含用户环境信息的对象。console.log(process.env.PATH); // 输出 PATH 环境变量
process.exit([code])
: 退出当前进程。可选的code
参数是退出码,默认为 0。process.exit(1); // 退出进程并返回 1 作为退出码
process.cwd()
: 返回当前工作目录。console.log(process.cwd()); // 输出当前工作目录
process.memoryUsage()
: 返回一个对象,包含 Node.js 进程的内存使用情况。console.log(process.memoryUsage()); // 输出内存使用情况
process.nextTick(callback)
: 在事件循环的下一个周期中调用callback
。process.nextTick(() => { console.log("This will run in the next event loop cycle"); });
4. global
global
对象是一个 Node.js 全局对象,所有模块都可以访问。定义在 global
对象上的任何内容都可以被任何模块访问。
global.setTimeout(callback, delay[, ...args])
: 定时执行回调函数。global.setTimeout(() => { console.log("Executed after 2 seconds"); }, 2000);
global.setInterval(callback, delay[, ...args])
: 定期执行回调函数。global.setInterval(() => { console.log("Executed every 2 seconds"); }, 2000);
global.clearTimeout(timeoutObject)
: 停止通过setTimeout()
创建的计时器。global.clearInterval(intervalObject)
: 停止通过setInterval()
创建的计时器。
5. module
和 exports
module
: 表示当前模块。通过module.exports
可以导出模块的内容。exports
: 是一个快捷方式,等同于module.exports
。初始值是一个空对象{}
,用于导出模块内容。
// example.js
module.exports.sayHello = function () {
console.log("Hello, World!");
};
// main.js
const example = require('./example');
example.sayHello(); // 输出:Hello, World!
6. require()
require()
是一个用于引入模块的函数,允许你加载 Node.js 内置模块、第三方模块或自定义模块。
const fs = require('fs'); // 引入文件系统模块
const customModule = require('./customModule'); // 引入自定义模块
7. Buffer
Buffer
是用于处理二进制数据的类,允许在不需要单独使用数据流的情况下操作文件或数据。
- 创建 Buffer 实例:
const buf = Buffer.from('Hello World'); // 通过字符串创建 Buffer console.log(buf.toString()); // 输出:Hello World
8. setImmediate()
setImmediate()
是一种特殊的计时器,用于在事件循环的当前周期结束时执行代码。它比 setTimeout
更有效率,因为它不需要等待时间。
setImmediate(() => {
console.log("This runs immediately after I/O events");
});
9. clearImmediate()
clearImmediate()
用于停止由 setImmediate()
创建的立即执行。
const immediate = setImmediate(() => {
console.log("This will not run");
});
clearImmediate(immediate);
10. queueMicrotask()
queueMicrotask()
方法允许你将一个函数添加到 JavaScript 微任务队列中。微任务在事件循环的每一个阶段之间运行。
queueMicrotask(() => {
console.log("This will run after the current script but before any other I/O events");
});
11. TextEncoder
和 TextDecoder
TextEncoder
和 TextDecoder
是用于处理文本编码和解码的全局类,特别是处理 UTF-8 编码。
TextEncoder
:const encoder = new TextEncoder(); const uint8Array = encoder.encode('Hello World'); console.log(uint8Array); // 输出:Uint8Array([...])
TextDecoder
:const decoder = new TextDecoder('utf-8'); const text = decoder.decode(uint8Array); console.log(text); // 输出:Hello World
总结
Node.js 提供了丰富的全局对象和方法,可以帮助你在各种情况下快速编写代码。通过了解和使用这些全局对象和方法,你可以更高效地进行 Node.js 开发。