您现在的位置是:网站首页 > Node.js的全局对象文章详情
Node.js的全局对象
陈川
【
Node.js
】
42108人已围观
3258字
Node.js的全局对象是运行时环境中可直接使用的对象,无需通过require
引入。它们在不同模块间共享,提供核心功能如模块加载、进程控制和缓冲区操作。
global对象
global
是Node.js的顶级对象,类似于浏览器中的window
。所有全局属性(如process
、console
)都是global
的子属性。
// 显式访问global属性
console.log(global.process.version);
// 隐式访问
console.log(process.version);
// 自定义全局变量
global.myVar = '全局可见';
console.log(myVar); // 直接访问
注意:使用var
或let
定义的变量不会挂载到global
上:
var localVar = '局部变量';
console.log(global.localVar); // undefined
process对象
process
提供与当前Node.js进程交互的能力:
// 环境变量
console.log(process.env.NODE_ENV);
// 命令行参数
process.argv.forEach((val, index) => {
console.log(`${index}: ${val}`);
});
// 退出进程
process.on('exit', (code) => {
console.log(`退出码: ${code}`);
});
process.exit(1);
// 工作目录操作
console.log(process.cwd());
process.chdir('../');
console对象
增强的调试工具,支持多种输出级别:
console.time('耗时操作');
for(let i=0; i<1000000; i++){}
console.timeEnd('耗时操作'); // 耗时操作: 2.123ms
console.table([
{ name: 'Alice', age: 25 },
{ name: 'Bob', age: 30 }
]);
// 堆栈跟踪
console.trace('当前位置');
定时器方法
Node.js实现了与浏览器相同的定时器API:
// 立即执行
setImmediate(() => {
console.log('下一个事件循环执行');
});
// 下次事件循环前执行
process.nextTick(() => {
console.log('优先于setImmediate执行');
});
// 间隔定时器
const interval = setInterval(() => {
console.log('每秒执行');
}, 1000);
// 清除定时器
setTimeout(() => {
clearInterval(interval);
}, 5000);
Buffer类
处理二进制数据的核心类:
// 创建缓冲区
const buf1 = Buffer.from('Hello');
const buf2 = Buffer.alloc(10);
// 写入数据
buf2.write('Node.js');
// 缓冲区操作
const concatBuf = Buffer.concat([buf1, buf2]);
console.log(concatBuf.toString()); // HelloNode.js
// 编码转换
const hexStr = buf1.toString('hex');
console.log(hexStr); // 48656c6c6f
__filename与__dirname
当前模块的绝对路径信息:
console.log(__filename); // /Users/project/app.js
console.log(__dirname); // /Users/project
// 路径解析示例
const path = require('path');
const fullPath = path.join(__dirname, 'config.json');
module、exports和require
模块系统的核心对象:
// 模块导出
exports.hello = () => console.log('Hello');
module.exports = { version: '1.0' };
// 模块加载
const fs = require('fs');
const myModule = require('./my-module');
// 模块信息
console.log(module.id);
console.log(module.parent);
EventEmitter类
事件驱动架构的基础:
const EventEmitter = require('events');
class MyEmitter extends EventEmitter {}
const myEmitter = new MyEmitter();
myEmitter.on('event', (arg) => {
console.log('触发事件', arg);
});
myEmitter.emit('event', { data: 123 });
// 一次性监听器
myEmitter.once('single', () => {
console.log('只执行一次');
});
URL类
URL解析工具:
const myURL = new URL('https://example.com:8080/p/a/t/h?query=string#hash');
console.log(myURL.hostname); // example.com
console.log(myURL.searchParams.get('query')); // string
// URL格式化
myURL.port = '443';
console.log(myURL.toString()); // https://example.com/p/a/t/h?query=string#hash
全局函数
可直接调用的核心函数:
// 解码URL组件
console.log(decodeURIComponent('%E4%B8%AD%E6%96%87')); // 中文
// 异步回调包装
require('util').promisify(fs.readFile)('file.txt')
.then(data => console.log(data.toString()));
// 立即解析的Promise
setImmediate(() => {
queueMicrotask(() => console.log('微任务执行'));
});
上一篇: Node.js版本管理工具(nvm/n)
下一篇: Node.js的REPL环境