当前位置: 首页 > news >正文

前端开发 详解 Node. js 都有哪些全局对象?

Node.js 中,全局对象(Global Objects)是指在任何模块中都可以直接访问的对象和变量,而不需要显式地进行导入。Node.js 提供了一些全局对象,帮助开发者在编写应用程序时更加方便地进行一些常见操作,如文件系统操作、定时任务、路径处理等。

常见的 Node.js 全局对象

  1. global
  2. __dirname
  3. __filename
  4. process
  5. setTimeout()setInterval()
  6. Buffer
  7. require()
  8. moduleexports

下面我们会通过具体的项目代码示例来讲解这些全局对象的使用。


1. global

global 是 Node.js 提供的全局对象,类似于浏览器中的 window。它是全局作用域中的对象,可以访问和修改它的属性。通常不常用,因为 Node.js 提供了其他更有用的全局对象,但在某些场合可以用来存储一些全局变量。

示例:使用 global 存储全局变量
// global-example.js// 在 global 对象上存储一个全局变量
global.myGlobalVar = "Hello, World!";function greet() {console.log(global.myGlobalVar); // 直接访问全局变量
}greet();  // 输出 "Hello, World!"

在上述示例中,我们将一个变量存储在 global 对象上,并在函数 greet() 中访问这个变量。

2. __dirname__filename

  • __dirname:表示当前模块所在的目录的绝对路径。
  • __filename:表示当前模块的文件的绝对路径。

这两个对象非常有用,尤其是在处理文件路径时,避免使用相对路径来引用文件。

示例:使用 __dirname__filename
// path-example.jsconsole.log("__dirname:", __dirname);  // 输出当前模块所在目录的路径
console.log("__filename:", __filename);  // 输出当前模块的完整路径// 拼接文件路径
const path = require('path');
const filePath = path.join(__dirname, 'example.txt');
console.log("File Path:", filePath);

在这个示例中,__dirname__filename 分别输出当前文件的路径和所在目录的路径,我们还通过 path.join() 方法拼接路径来构造文件的绝对路径。

3. process

process 是 Node.js 提供的一个全局对象,包含了与当前 Node.js 进程相关的各种信息。你可以通过它获取命令行参数、环境变量、进程信息等。

常用方法:
  • process.argv:获取命令行参数。
  • process.env:获取环境变量。
  • process.exit():退出当前进程。
  • process.exitCode:设置进程的退出码。
示例:使用 process 获取命令行参数
// process-example.jsconsole.log("Process Arguments:", process.argv);  // 输出命令行参数// 获取第一个参数
const name = process.argv[2] || 'Guest';
console.log(`Hello, ${name}!`);

在这个示例中,我们使用 process.argv 获取命令行参数。运行时,可以通过命令行传递参数。

node process-example.js John

输出将是:

Process Arguments: [ 'node', 'process-example.js', 'John' ]
Hello, John!

4. setTimeout()setInterval()

这两个方法用于设置定时器:

  • setTimeout():指定延迟执行某个函数。
  • setInterval():指定每隔一段时间重复执行某个函数。
示例:使用 setTimeout()setInterval()
// timeout-interval-example.js// 使用 setTimeout 延迟执行
setTimeout(() => {console.log("This runs after 3 seconds.");
}, 3000);// 使用 setInterval 定时执行
let count = 0;
const intervalId = setInterval(() => {count++;console.log(`This runs every 2 seconds. Count: ${count}`);if (count === 5) {clearInterval(intervalId); // 终止定时器console.log("Interval stopped.");}
}, 2000);

在这个示例中,setTimeout() 延迟 3 秒后执行一次,而 setInterval() 每 2 秒执行一次,直到执行 5 次后使用 clearInterval() 停止定时器。

5. Buffer

Buffer 是 Node.js 中用于处理二进制数据的全局对象。它允许直接在内存中操作二进制数据块,通常用于与流(Stream)相关的操作。

示例:使用 Buffer 处理二进制数据
// buffer-example.jsconst buf = Buffer.from('Hello, Node.js!');
console.log(buf);  // 输出 Buffer: <Buffer 48 65 6c 6c 6f 2c 20 4e 6f 64 65 2e 6a 73 21>// 将 Buffer 转换为字符串
console.log(buf.toString());  // 输出 "Hello, Node.js!"

在这个示例中,Buffer.from() 用于创建一个新的 Buffer,然后我们使用 toString() 方法将二进制数据转换为字符串。

6. require()

require() 是 Node.js 中用来导入模块的全局函数。通过它,我们可以加载文件、内置模块或第三方模块。

示例:使用 require() 导入模块
// require-example.jsconst fs = require('fs');  // 导入 fs 模块
const path = require('path');  // 导入 path 模块// 使用 fs 模块读取文件
fs.readFile(path.join(__dirname, 'example.txt'), 'utf8', (err, data) => {if (err) {console.error("Error reading file:", err);} else {console.log("File content:", data);}
});

在这个示例中,我们通过 require() 导入了内置的 fs 模块和 path 模块,然后使用它们读取文件内容。

7. moduleexports

moduleexports 是 Node.js 提供的用于模块化的全局对象,帮助我们导出和导入模块。

  • module.exports 用于导出模块内容。
  • module 对象表示当前模块的元数据。
示例:使用 module.exports 导出模块
// greet.js
module.exports.greet = function(name) {console.log(`Hello, ${name}!`);
};// app.js
const greetModule = require('./greet');
greetModule.greet('Alice');  // 输出 "Hello, Alice!"

在这个示例中,greet.js 模块通过 module.exports 导出了一个 greet 函数,app.js 模块通过 require() 导入了 greet.js 模块并调用了它。


总结

Node.js 提供了许多有用的全局对象,可以帮助我们更高效地编写代码和处理常见任务。通过合理使用这些全局对象,可以让我们的 Node.js 应用程序更加简洁和高效。常见的全局对象包括:

  • global:用于存储全局变量。
  • __dirname__filename:用于获取当前文件和目录的路径。
  • process:提供与进程相关的信息和方法。
  • setTimeout()setInterval():用于定时执行任务。
  • Buffer:处理二进制数据。
  • require():用于加载模块。
  • moduleexports:用于模块化代码。

这些全局对象的合理使用将使开发过程更加简便和高效。

相关文章:

前端开发 详解 Node. js 都有哪些全局对象?

在 Node.js 中&#xff0c;全局对象&#xff08;Global Objects&#xff09;是指在任何模块中都可以直接访问的对象和变量&#xff0c;而不需要显式地进行导入。Node.js 提供了一些全局对象&#xff0c;帮助开发者在编写应用程序时更加方便地进行一些常见操作&#xff0c;如文件…...

2024_12_20_生活记录

年底了&#xff0c;提前祝各位朋友们新年快乐&#xff01;我将近两年没动笔写blog了&#xff0c;主要确实挺忙。。。今天想简单聊聊自己的近期想法&#xff0c;一方面是职业规划&#xff0c;一方面是生信&#xff0c;最后是个人感悟。 职业规划 熟悉我的朋友们会了解我之前一直…...

Sequelize ORM 现有表如何使用

一、 在mysql中创建一个表 或者随便找一个现有的表 已经有了一张叫做xw_posts的表。表里的字段非常简单&#xff0c;大家可以自己建一下 CREATE TABLE xw_posts (id int unsigned NOT NULL AUTO_INCREMENT,name varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_…...

ArcGIS Pro 3.4新功能3:空间统计新特性,基于森林和增强分类与回归,过滤空间自相关

目录 应用 1&#xff1a;它是相关性还是托布勒第一定律&#xff1f; 应用 2&#xff1a;将空间带入非空间模型 结论 在 ArcGIS Pro 3.4 中&#xff0c;我们在新的空间组件实用程序&#xff08;Moran 特征向量&#xff09;工具集中发布了一个新工具 - 从字段过滤空间自相关。…...

H3C MPLS跨域optionB

实验拓扑 实验需求 如图,VPN1 和 VPN2 分别通过运营商 MPLS VPN 连接各自分支机构按照图示配置 IP 地址,VPN1 和 VPN2 连接同一个 PE 设备的私网 IP 网段存在地址复用,使用多 VRF 技术来防止 IP 冲突AS 100 和 AS 200 内部的公共网络中各自运行 OSPF 使 AS 内各设备的 Loo…...

源码分析之Openlayers中Geometry基类介绍

概述 在上一篇文章源码分析之Openlayers中Geom篇中提到Geometry类是继承于 Openlayers 中的BaseObject类(参考源码分析之Openlayers中核心BaseObject类).而Geometry类通常情况下也是作为一个抽象基类,作为Geom几何图形的基类或父类,不会在应用中去实例化它.Geometry类回去注册…...

《Vue3 三》Vue 中的 options 选项

data 选项&#xff1a; data 选项&#xff1a;属性值必须是一个函数&#xff1b;返回值是一个对象&#xff0c;返回的对象会被 Vue 的响应式系统劫持&#xff0c;之后对该对象的任何访问或者修改都会在劫持中被处理。 在 Vue2.x 中&#xff0c;data 的属性值可以是一个函数&am…...

Elasticsearch 国产化替代方案之一 Easysearch 的介绍与部署指南

一、前言 在国内数字化转型浪潮和 信创 大背景下&#xff0c;“替代进口”成为许多企业级应用所需要面对的重要课题&#xff0c;搜索领域也不例外。 Elasticsearch&#xff08;简称 ES&#xff09;作为一款业界领先的全文搜索和分析引擎&#xff0c;虽然功能强大&#xff0c;但…...

Pytorch | 从零构建EfficientNet对CIFAR10进行分类

Pytorch | 从零构建EfficientNet对CIFAR10进行分类 CIFAR10数据集EfficientNet设计理念网络结构性能特点应用领域发展和改进 EfficientNet结构代码详解结构代码代码详解MBConv 类初始化方法前向传播 forward 方法 EfficientNet 类初始化方法前向传播 forward 方法 训练过程和测…...

Python超能力:高级技巧让你的代码飞起来

文章一览 前言一、with1.1 基本用法1.2 示例自定义上下文管理器 二、条件表达式三、列表式推导式与 zip 结合 四、map() 函数&#xff08;内置函数&#xff09;map用于数据清洗1. 数据清洗&#xff1a;字母大小写规范2. filter() 函数 五、匿名函数 lambda5.1 lambda的参数&…...

熊军出席ACDU·中国行南京站,详解SQL管理之道

12月21日&#xff0c;2024 ACDU中国行在南京圆满收官&#xff0c;本次活动分为三个篇章——回顾历史、立足当下、展望未来&#xff0c;为线上线下与会观众呈现了一场跨越时空的技术盛宴&#xff0c;吸引了众多业内人士的关注。云和恩墨副总经理熊军出席此次活动并发表了主题演讲…...

FPGA实现MIPI转FPD-Link车载同轴视频传输方案,基于IMX327+FPD953架构,提供工程源码和技术支持

目录 1、前言工程概述免责声明 2、相关方案推荐本博主所有FPGA工程项目-->汇总目录我这里已有的 MIPI 编解码方案 3、本 MIPI CSI-RX IP 介绍4、详细设计方案设计原理框图IMX327 及其配置FPD-Link视频串化-解串方案MIPI CSI RX图像 ISP 处理图像缓存HDMI输出工程源码架构 5、…...

vue3动态绑定图片和使用阿里巴巴矢量图

矢量图 1。加购物车 2. 下载在本地 解压 &#xff08;把以下文件放进项目文件夹里面&#xff09; ├── font ├── iconfont.css ├── iconfont.json &#xff08;font-class用法&#xff09; ├── iconfont.js &#xff08;symbol用法&#xff09; ├─…...

‘vite‘ 不是内部或外部命令,也不是可运行的程序

报错&#xff1a;执行 npm run dev时&#xff0c;提示’vite’ 不是内部或外部命令&#xff0c;也不是可运行的程序 解决&#xff1a;执行 npm install -g vite 报错&#xff1a;导入vite后再次执行npm run dev&#xff0c;报错failed to load config from E:\eclipseWP\test1…...

2024年12月一区SCI-加权平均优化算法Weighted average algorithm-附Matlab免费代码

引言 本期介绍了一种基于加权平均位置概念的元启发式优化算法&#xff0c;称为加权平均优化算法Weighted average algorithm&#xff0c;WAA。该成果于2024年12月最新发表在中JCR1区、 中科院1区 SCI期刊 Knowledge-Based Systems。 在WAA算法中&#xff0c;加权平均位置代表当…...

如何获取 ABAP 内表中的重复项

要识别 ABAP 内表中的重复项&#xff0c;可以结合使用排序和循环。下面的示例展示了如何查找内部表中的重复条目&#xff1a; DATA: BEGIN OF itab OCCURS 0,field1 TYPE i,field2 TYPE c LENGTH 10,END OF itab,wa LIKE LINE OF itab.* Add sample data to internal table it…...

编译笔记:vs 中 正在从以下位置***加载符号 C# 中捕获C/C++抛出的异常

加载符号 解决方法&#xff1a; 进入VS—工具—选项----调试----符号&#xff0c;看右边有个“Microsoft符号服务器”&#xff0c;将前面的勾去掉&#xff0c;&#xff08;可能还有删除下面的那个缓存&#xff09;。 参考 C# 中捕获C/C抛出的异常 在需要捕捉破坏性异常的函数…...

ChatGPT与Postman协作完成接口测试(二)

ChatGPT生成的Postman接口测试用例脚本如下所示。 ChatGPT生成的Postman接口测试用例脚本 以下是符合Collection v2.1格式要求的 Postman 测试用例脚本&#xff0c;覆盖了正常注册和密码不匹配两种情况的测试&#xff1a; { "info": { "_postman_id": &qu…...

flask-admin modelview 中重写get_query函数

背景&#xff1a; flask-admin框架中提供的模型视图默认是显示表实体中的所有列表数据&#xff0c;如果想通过某种条件限制初始列表数据&#xff0c;那么久需要重写一些方法才能实现。 材料&#xff1a; 略 制作&#xff1a; 视图源码&#xff1a; def get_query(self):re…...

【python 逆向分析某有道翻译】分析有道翻译公开的密文内容,webpack类型,全程扣代码,最后实现接口调用翻译,仅供学习参考

文章日期&#xff1a;2024.12.24 使用工具&#xff1a;Python&#xff0c;Node.js 逆向类型&#xff1a;webpack类型 本章知识&#xff1a;sign模拟生成&#xff0c;密文的解密(webpack)&#xff0c;全程扣代码&#xff0c;仅供学习参考 文章难度&#xff1a;低等&#xff08;没…...

基于当前项目通过npm包形式暴露公共组件

1.package.sjon文件配置 其中xh-flowable就是暴露出去的npm包名 2.创建tpyes文件夹&#xff0c;并新增内容 3.创建package文件夹...

学习STC51单片机31(芯片为STC89C52RCRC)OLED显示屏1

每日一言 生活的美好&#xff0c;总是藏在那些你咬牙坚持的日子里。 硬件&#xff1a;OLED 以后要用到OLED的时候找到这个文件 OLED的设备地址 SSD1306"SSD" 是品牌缩写&#xff0c;"1306" 是产品编号。 驱动 OLED 屏幕的 IIC 总线数据传输格式 示意图 …...

Mac软件卸载指南,简单易懂!

刚和Adobe分手&#xff0c;它却总在Library里给你写"回忆录"&#xff1f;卸载的Final Cut Pro像电子幽灵般阴魂不散&#xff1f;总是会有残留文件&#xff0c;别慌&#xff01;这份Mac软件卸载指南&#xff0c;将用最硬核的方式教你"数字分手术"&#xff0…...

令牌桶 滑动窗口->限流 分布式信号量->限并发的原理 lua脚本分析介绍

文章目录 前言限流限制并发的实际理解限流令牌桶代码实现结果分析令牌桶lua的模拟实现原理总结&#xff1a; 滑动窗口代码实现结果分析lua脚本原理解析 限并发分布式信号量代码实现结果分析lua脚本实现原理 双注解去实现限流 并发结果分析&#xff1a; 实际业务去理解体会统一注…...

2025盘古石杯决赛【手机取证】

前言 第三届盘古石杯国际电子数据取证大赛决赛 最后一题没有解出来&#xff0c;实在找不到&#xff0c;希望有大佬教一下我。 还有就会议时间&#xff0c;我感觉不是图片时间&#xff0c;因为在电脑看到是其他时间用老会议系统开的会。 手机取证 1、分析鸿蒙手机检材&#x…...

基于matlab策略迭代和值迭代法的动态规划

经典的基于策略迭代和值迭代法的动态规划matlab代码&#xff0c;实现机器人的最优运输 Dynamic-Programming-master/Environment.pdf , 104724 Dynamic-Programming-master/README.md , 506 Dynamic-Programming-master/generalizedPolicyIteration.m , 1970 Dynamic-Programm…...

OPENCV形态学基础之二腐蚀

一.腐蚀的原理 (图1) 数学表达式&#xff1a;dst(x,y) erode(src(x,y)) min(x,y)src(xx,yy) 腐蚀也是图像形态学的基本功能之一&#xff0c;腐蚀跟膨胀属于反向操作&#xff0c;膨胀是把图像图像变大&#xff0c;而腐蚀就是把图像变小。腐蚀后的图像变小变暗淡。 腐蚀…...

【数据分析】R版IntelliGenes用于生物标志物发现的可解释机器学习

禁止商业或二改转载&#xff0c;仅供自学使用&#xff0c;侵权必究&#xff0c;如需截取部分内容请后台联系作者! 文章目录 介绍流程步骤1. 输入数据2. 特征选择3. 模型训练4. I-Genes 评分计算5. 输出结果 IntelliGenesR 安装包1. 特征选择2. 模型训练和评估3. I-Genes 评分计…...

使用Spring AI和MCP协议构建图片搜索服务

目录 使用Spring AI和MCP协议构建图片搜索服务 引言 技术栈概览 项目架构设计 架构图 服务端开发 1. 创建Spring Boot项目 2. 实现图片搜索工具 3. 配置传输模式 Stdio模式&#xff08;本地调用&#xff09; SSE模式&#xff08;远程调用&#xff09; 4. 注册工具提…...

MySQL 索引底层结构揭秘:B-Tree 与 B+Tree 的区别与应用

文章目录 一、背景知识&#xff1a;什么是 B-Tree 和 BTree&#xff1f; B-Tree&#xff08;平衡多路查找树&#xff09; BTree&#xff08;B-Tree 的变种&#xff09; 二、结构对比&#xff1a;一张图看懂 三、为什么 MySQL InnoDB 选择 BTree&#xff1f; 1. 范围查询更快 2…...