您现在的位置是:网站首页 > Node.js的全局对象文章详情

Node.js的全局对象

Node.js的全局对象是运行时环境中可直接使用的对象,无需通过require引入。它们在不同模块间共享,提供核心功能如模块加载、进程控制和缓冲区操作。

global对象

global是Node.js的顶级对象,类似于浏览器中的window。所有全局属性(如processconsole)都是global的子属性。

// 显式访问global属性
console.log(global.process.version);

// 隐式访问
console.log(process.version);

// 自定义全局变量
global.myVar = '全局可见';
console.log(myVar); // 直接访问

注意:使用varlet定义的变量不会挂载到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('微任务执行'));
});

我的名片

网名:~川~

岗位:console.log 调试员

坐标:重庆市-九龙坡区

邮箱:cc@qdcc.cn

沙漏人生

站点信息

  • 建站时间:2013/03/16
  • 本站运行
  • 文章数量
  • 总访问量
微信公众号
每次关注
都是向财富自由迈进的一步