Nodejs 全局变量的常用方法与用法(详细列举)

一、简介

  • Node.js 中,全局变量是指无需通过 require 或其他方式导入即可直接使用的变量。这些变量在所有模块中都可用。

二、常用方法

> __dirname

表示当前模块的目录路径。

  • 功能:提供当前文件所在目录的绝对路径。

  • 示例

    console.log(__dirname); 
    // 输出:/path/to/current/directory
    

> __filename

表示当前模块文件的绝对路径。

  • 功能:提供当前文件的完整路径,包括文件名。

  • 示例

    console.log(__filename); 
    // 输出:/path/to/current/directory/filename.js
    

> process

表示当前 Node.js 进程的信息和控制。

  • 功能:访问环境变量、工作目录、内存使用情况等。

  • 常用属性和方法

    console.log(process.env.NODE_ENV); // 获取环境变量
    console.log(process.cwd());        // 获取当前工作目录
    console.log(process.pid);          // 获取当前进程 ID
    

> Buffer

用于处理二进制数据。

  • 功能:创建和操作二进制数据。

  • 示例

    const buf = Buffer.from('Hello, Node.js');
    console.log(buf.toString()); // 输出:Hello, Node.js
    

> global(Node.js 专用)

Node.js 的全局对象,相当于浏览器中的 window,提供对全局作用域的访问。

  • 特性

    • Node.js 专用globalNode.js 提供的全局对象,仅在 Node.js 环境下可用。在浏览器中,它并不存在。
    • 用于全局变量:通过 global 可以访问 Node.js 中的全局变量或在全局作用域中定义的变量。
  • 用途:在整个程序中访问全局变量或函数。在 Node.js 中使用 global 作为一个特定的全局对象。例如,它可以用来存储跨模块的数据,或者用于定义全局函数等。

  • 示例

    // 在 Node.js 中
    global.myVar = 'This is a global variable!';
    console.log(global.myVar); // 输出:This is a global variable!
    

> globalThis(所有环境通用)

这是一个一个标准化的全局对象,无论在哪种环境下都能统一访问全局作用域。在所有 JavaScript 环境(包括浏览器Node.js)中都可以访问。

  • 特性

    • 统一性globalThis 是一个跨平台的全局对象,意味着可以在任何 JavaScript 环境(无论是浏览器Node.jsWeb Worker、或者其他 JavaScript环境)中都可以通过它来访问全局作用域。
    • 标准化globalThisECMAScript 2020(ES11)标准引入的,因此它在所有支持 ECMAScript 2020JavaScript 环境中都是可用的。
  • 用途: 跨平台访问全局作用域。用于跨平台编写 JavaScript 代码,确保可以访问全局对象,而不管当前执行环境是浏览器还是 Node.js

  • 示例

    globalThis.myGlobal = 'Hello!';
    console.log(globalThis.myGlobal); // 输出:Hello!
    
    // 在 Node.js 中
    console.log(globalThis); // 输出:Node.js 的全局对象
    
    // 在浏览器中
    console.log(globalThis); // 输出:浏览器的全局对象 (window)
    

> globalglobalThis 主要区别

  • 主要区别

    特性 globalThis global
    适用环境 浏览器、Node.js、Web Worker 等所有 JavaScript 环境 仅在 Node.js 环境下可用
    标准化 是 ECMAScript 2020 (ES11) 标准的一部分 Node.js 独有
    引用的全局对象 在所有环境中都可以统一引用全局对象 在 Node.js 中指向全局对象,无法在浏览器中使用
    兼容性 适用于所有支持 ECMAScript 2020 的 JavaScript 环境 仅适用于 Node.js 环境
  • 总结

    • 如果需要编写可以在 浏览器Node.js 中都能运行的代码,并且想要访问全局作用域,使用 globalThis 是最佳选择。

    • 如果只在 Node.js 中工作,并且需要访问 Node.js 的全局对象,可以使用 global

    • globalThis 是更现代的选择,因为它可以在多种执行环境中保持一致性,而 global 仅限于 Node.js。

> setTimeout(callback, delay)

设置一个延时定时器,在指定时间后执行回调函数。

  • 示例

    setTimeout(() => {
          
          
      console.log('Executed after 1 second');
    }, 1000);
    

> clearTimeout(timeoutId)

清除通过 setTimeout 创建的延时定时器。

  • 示例

    const timeoutId = setTimeout(() => {
          
          
      console.log('This will not execute');
    }, 2000);
    
    clearTimeout(timeoutId);
    

> setInterval(callback, delay)

设置一个间隔定时器,每隔指定时间执行一次回调函数。

  • 示例

    const intervalId = setInterval(() => {
          
          
      console.log('Runs every 2 seconds');
    }, 2000);
    

> clearInterval(intervalId)

清除通过 setInterval 创建的间隔定时器。

  • 示例

    const intervalId = setInterval(() => {
          
          
      console.log('This will stop after 5 seconds');
    }, 1000);
    
    setTimeout(() => {
          
          
      clearInterval(intervalId);
    }, 5000);
    

> setImmediate(callback)

立即执行的函数回调,比 setTimeout 更快。

  • 示例

    setImmediate(() => {
          
          
      console.log('Executed immediately after I/O events');
    });
    

> clearImmediate(immediateId)

清除通过 setImmediate 创建的任务。

  • 示例

    const immediateId = setImmediate(() => {
          
          
      console.log('This will not execute');
    });
    
    clearImmediate(immediateId);
    

> require

用于引入模块或文件。

  • 示例

    const fs = require('fs'); // 引入文件系统模块
    fs.writeFileSync('example.txt', 'Hello, World!');
    

> moduleexports

表示当前模块的信息及导出的内容。

  • 示例

    // 导出模块
    module.exports = {
          
          
      hello: 'Hello, world!'
    };
    
    // 或者使用快捷方式
    exports.hello = 'Hello, world!';
    
    // 导入模块
    const myModule = require('./myModule');
    console.log(myModule.hello); // 输出:Hello, world!
    

> console

提供控制台日志打印功能。

  • 常见方法

    console.log('Log message');    // 打印普通日志
    console.error('Error message'); // 打印错误日志
    console.warn('Warning message'); // 打印警告日志
    

> require.resolve

返回模块的绝对路径,但不加载模块。

  • 用途:用于定位模块的实际位置。

  • 示例

    const path = require.resolve('fs');
    console.log(path); // 输出:fs 模块的路径
    

> require.cache

缓存已加载的模块,避免重复加载。

  • 用途:优化性能,或手动清除模块缓存。

  • 示例

    const fs = require('fs');
    console.log(require.cache); // 输出当前已加载模块的缓存对象
    
    // 清除某个模块缓存
    delete require.cache[require.resolve('fs')];
    

> exports

用于导出模块的接口,是 module.exports 的快捷方式。

  • 用途:导出模块内容供其他模块使用。

  • 示例

    exports.hello = 'Hello World!';
    

> __proto__

这是所有对象的原型链(通常通过 Object.getPrototypeOf 替代)。

  • 用途:在需要动态修改原型时使用。

  • 示例

    const obj = {
          
          };
    console.log(obj.__proto__); // 输出:Object 的原型
    

> TextEncoderTextDecoder

用于编码和解码文本。

  • 用途:将字符串转换为二进制数据(Buffer)或从二进制转换为字符串。

  • 示例

    const encoder = new TextEncoder();
    const buffer = encoder.encode('Hello, World!');
    console.log(buffer); // 输出:Uint8Array
    
    const decoder = new TextDecoder();
    console.log(decoder.decode(buffer)); // 输出:Hello, World!
    

> queueMicrotask

将一个回调函数添加到微任务队列中。

  • 用途:执行异步操作但优先于下一个事件循环。

  • 示例

    queueMicrotask(() => {
          
          
      console.log('This is a microtask');
    });
    console.log('This is executed first');
    // 输出:
    // This is executed first
    // This is a microtask
    

> performance

提供高精度时间测量。

  • 用途:测量代码执行时间。

  • 示例

    const start = performance.now();
    for (let i = 0; i < 1e6; i++) {
          
          } // 模拟一些计算
    const end = performance.now();
    console.log(`Execution time: ${
            
            end - start}ms`);
    

> URLURLSearchParams

用于处理和解析 URL。

  • 用途:解析和操作 URL。

  • 示例

    const url = new URL('https://example.com?name=John&age=30');
    console.log(url.hostname); // 输出:example.com
    console.log(url.searchParams.get('name')); // 输出:John
    

> Intl

提供国际化功能。

  • 用途:格式化日期、时间、数字等。

  • 示例

    const formatter = new Intl.NumberFormat('en-US', {
          
           style: 'currency', currency: 'USD' });
    console.log(formatter.format(123456.78)); // 输出:$123,456.78
    

> AtomicsSharedArrayBuffer

用于多线程环境下的共享内存和原子操作(在 Node.js Worker 中使用)。

  • 用途:实现线程安全的并发操作。

  • 示例

    const buffer = new SharedArrayBuffer(1024);
    const arr = new Uint8Array(buffer);
    Atomics.store(arr, 0, 123);
    console.log(Atomics.load(arr, 0)); // 输出:123
    

> DTRACE Hooks

这些是为调试和性能分析而设计的,允许开发者挂钩 DTrace

  • 常见 hooks

    • DTRACE_HTTP_SERVER_REQUEST
    • DTRACE_HTTP_SERVER_RESPONSE
    • DTRACE_HTTP_CLIENT_REQUEST
    • DTRACE_HTTP_CLIENT_RESPONSE