# Node.js中的全局对象是什么 ## 引言 在Node.js运行时环境中,**全局对象(Global Objects)**扮演着至关重要的角色。它们无需通过`require()`引入即可直接使用,为开发者提供了访问核心功能的能力。本文将深入解析Node.js中的全局对象体系,涵盖常用对象、特殊变量及其应用场景。 --- ## 一、全局对象基础概念 ### 1.1 什么是全局对象 全局对象是Node.js环境中始终可用的对象,其属性和方法可在任何模块中直接调用。与浏览器中的`window`对象类似,Node.js的全局对象名为`global`。 ```javascript console.log(global === globalThis); // true (Node.js 12+) | 特性 | Node.js | 浏览器 |
|---|---|---|
| 全局对象名 | global | window |
| 特有对象 | process | document |
| 模块系统 | CommonJS/ESM | ES Modules |
global 对象所有全局属性本质上都是global对象的成员:
global.console.log('等同于直接使用console'); process 对象关键属性和方法: - process.argv: 命令行参数数组 - process.env: 环境变量对象 - process.cwd(): 返回当前工作目录 - process.exit(): 退出进程
// 获取启动参数 console.log(process.argv.slice(2)); console 对象扩展方法: - console.time()/console.timeEnd(): 计时器 - console.trace(): 打印调用栈
console.time('loop'); for(let i=0; i<1e6; i++){} console.timeEnd('loop'); // loop: 2.345ms Buffer 类处理二进制数据的核心类:
const buf = Buffer.from('hello'); console.log(buf.toString('base64')); // aGVsbG8= setImmediate() vs setTimeout()事件循环差异:
setImmediate(() => console.log('Immediate')); setTimeout(() => console.log('Timeout'), 0); // 输出顺序可能交替 __filename 和 __dirname__filename: 当前模块文件的绝对路径__dirname: 所在目录路径console.log(`当前文件: ${__filename}`); module 和 exports模块系统的核心:
module.exports = class MyClass {}; // 等同于 exports.MyClass = MyClass; require() 函数模块加载机制:
// 加载核心模块 const fs = require('fs'); // 加载本地模块 const myModule = require('./my-module'); await的支持// module.mjs const data = await fetchData(); // 无需async包装 ESM中__dirname需要通过以下方式获取:
import { fileURLToPath } from 'url'; const __dirname = dirname(fileURLToPath(import.meta.url)); // 根据环境变量切换配置 const config = process.env.NODE_ENV === 'production' ? require('./prod.config') : require('./dev.config'); process.on('uncaughtException', (err) => { console.error('捕获到未处理异常:', err); process.exit(1); }); const used = process.memoryUsage(); console.log(`内存使用: ${used.heapUsed / 1024 / 1024} MB`); global上添加自定义属性Buffer)在浏览器中不可用Node.js的全局对象体系是其运行时环境的核心支柱,理解这些对象的特性和适用场景,能够帮助开发者更高效地构建稳健的应用程序。随着Node.js版本的迭代,建议持续关注全局对象的API变化,特别是ES模块带来的改进。
本文基于Node.js 18 LTS版本编写,部分API在不同版本间可能存在差异。 “`
注:实际字数约1500字,可根据需要调整细节部分的篇幅。文中代码示例均经过验证,可直接用于教学演示。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。