全局变量 global 、globalThis、nodejs内置全局API

news/2025/3/12 14:01:51/文章来源:https://www.cnblogs.com/zhuangdd/p/18767148

 

在nodejs 环境中  index.js 引用  a.js  ,在index.js 设置全局变量 global.xxx = 'xxx'  ,被引用的a.js 也读取全局变量xxx

但是在浏览器环境下,全局变量在 window。不同的环境需要判断,所以CMAScript 2020 出现了一个globalThis全局变量,在nodejs环境会自动切换成global 。

 

 

nodejs内置全局API

 

__dirname __filename 只能在cjs使用 esm规范没有这两个全局变量

__dirname   它表示当前模块的所在目录的绝对路径
 __filename      它表示当前模块文件的绝对路径,包括文件名和文件扩展名
 process

1、process.argv  返回包含命令行参数的数组  第一个元素是Node.js的执行路径,第二个元素是当前执行的JavaScript文件的路径,之后的元素是传递给脚本的命令行参数。

2、process.env : 这是一个包含当前环境变量的对象。您可以通过process.env访问并操作环境变量

但是不能改变全局的环境变量,仅在当前语言环境中使用

3、process.cwd(): 这个方法返回当前工作目录的路径。    

4、process.on(event, listener): 用于注册事件监听器。您可以使用process.on监听诸如exituncaughtException等事件,并在事件发生时执行相应的回调函数。

5、process.exit([code]): 用于退出当前的Node.js进程。您可以提供一个可选的退出码作为参数

6、process.pid: 这个属性返回当前进程的PID(进程ID)

 

这些只是process对象的一些常用属性和方法,还有其他许多属性和方法可用于监控进程、设置信号处理、发送IPC消息等。

需要注意的是,process对象是一个全局对象,可以在任何模块中直接访问,无需导入或定义。

 

Buffer 

在 Node.js 中,Buffer 类用于创建一个专门存放二进制数据的缓存区。由于 JavaScript 语言自身只有字符串数据类型,没有二进制数据类型,因此在处理像 TCP 流或文件流时,必须使用到二进制数据。Buffer 类是随 Node 内核一起发布的核心库,可以让 Node.js 处理二进制数据。

 

1、创建 Buffer 实例:

  • Buffer.alloc(size[, fill[, encoding]]): 创建一个指定大小的新的Buffer实例,初始内容为零。fill参数可用于填充缓冲区,encoding参数指定填充的字符编码。.
//创建一个长度为4096字节(0x1000十六进制)的缓冲区,并用十六进制数0x00填充它 
console.log(Buffer.alloc( 0x1000, 0x00, 'hex' ))

  

  Buffer.from(input[, encoding])     是 Node.js 中用于从不同类型的数据创建 Buffer 实例的方法

 

  1. input:用于创建 Buffer 的数据,可以是:

  • 一个 字符串(将被编码为 Buffer)。
  • 一个 数组 或 类数组对象
  • 一个 ArrayBuffer
  • 一个 现有的 Buffer(将被克隆)
  1. encoding(可选):指定编码方式,用于将字符串转换为 Buffer。常见的编码方式包括:

    • 'utf8'(默认)
    • 'ascii'
    • 'base64'
    • 'hex'
const buf1 = Buffer.from('你好,世界!', 'utf8'); //从字符串创建
const buf2 = Buffer.from([1, 2, 3, 4]);//从数组创建:
const buf3 = Buffer.from(buf2); //从现有 Buffer 创建(克隆):

const ab = new ArrayBuffer(10); //从 ArrayBuffer 创建
const buf4 = Buffer.from(ab);

 

 

2、读取和写入数据:

  • buffer[index]: 通过索引读取或写入Buffer实例中的特定字节。
  • buffer.length: 获取Buffer实例的字节长度。
const buf2 = Buffer.from([1, 2, 3, 4,"???","aazxd"])
console.log(buf2[0]) // 1
console.log(buf2.length) // 7

 

  • buffer.toString([encoding[, start[, end]]]): 将Buffer实例转换为字符串。
const buffer = Buffer.from('Hello, World!', 'utf8');console.log(buffer.toString('utf8'))//Hello, World!
console.log(buffer.toString('utf8', 0, 5)) //Hello

const buffer2 = Buffer.from('68656c6c6f', 'hex');  // '68656c6c6f' 是 'hello' 的十六进制表示
console.log(buffer2.toString('utf8'));  //hello 

 

buffer.toJSON()

用于将 Buffer 对象转换为 JSON 格式 返回的 JSON 对象包含一个 type 属性和一个 data 属性。

{type: 'Buffer',data: <Buffer的数据数组>
}

 

将 Buffer 转换为 JSON:
const buffer = Buffer.from('Hello, World!');
const json = buffer.toJSON();
console.log(json);
// 输出: { type: 'Buffer', data: [ 72, 101, 108, 108, 111, 44, 32, 87, 111, 114, 108, 100, 33 ] }

buffer.slice([start[, end]]): 返回一个新的Buffer实例,其中包含原始Buffer实例的部分内容。

其他:

  • Buffer.isBuffer(obj): 检查一个对象是否是Buffer实例。
  • Buffer.concat(list[, totalLength]): 将一组Buffer实例或字节数组连接起来形成一个新的Buffer实例。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/897687.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

如果看到子数组是数组中元素的连续非空序列,你能想到什么?

首先先讲一下前缀和,例如[1,1,1]的前缀和为[1,2,3]。所以在题目当中子数组是数组中元素的连续非空序列,立马联想到前缀和去解题。如力扣第560题和为K的子数组。 但是为了得到一个公式,如下(灵神思路)所以本题目,可以把K看成所要求的子数组和,而连续子数组的元素和可以根…

在 Hugging Face 上部署语音转语音模型

介绍 S2S (语音到语音) 是 Hugging Face 社区内存在的一个令人兴奋的新项目,它结合了多种先进的模型,创造出几乎天衣无缝的体验: 你输入语音,系统会用合成的声音进行回复。 该项目利用 Hugging Face 社区中的 Transformers 库提供的模型实现了流水话处理。该流程处理由以下组…

session,cookie和token究竟是什么

session,cookie和token究竟是什么 简述 cookie,session,token作为面试必问题,很多同学能答个大概,但是又迷糊不清,希望本篇文章对大家有所帮助 http是一个无状态协议 什么是无状态呢?就是说这一次请求和上一次请求是没有任何关系的,互不认识的,没有关联的。这种无状态…

算法心得(2)**前缀和**

**思路** 前缀和的思想就是 **把影响累加起来,每一次累加都作一次记录** 一般在情况满足两个条件时就使用它: (1)影响可以累加 (2)有多个查询 就拿计算二维矩阵面积来说:图中红框框起的一个子矩阵的面积为9+8+4-2+3+11=33,同时以左上角(蓝框,坐标为(2,2))和右下…

爬取Microsoft Bing网站图片

说明: 这个小案例主要是访问Microsoft Bing网站去爬取“车牌”图片,代码写的时候不规范,但是效果还行文件结构为下图:具体思路#爬取html.py import requests import time from tqdm import tqdm import os url=https://cn.bing.com/images/async headers={User-Agent:Mozill…

打开组策略,提示找不到资源$(string.WHFB_DisablePostLogonCredentialCaching)(在属性 displayName 中引|用)

情况 win11家庭版不提供组策略,因此我使用了网络上提供的命令进行开启。 开启后使用win自带的搜索,搜索组策略或是gpedit都没有反应,使用命令行输入gpedit可以正常跳出窗口,然而打开组策略提示如下。未解决 https://bbs.pcbeta.com/viewthread-1688611-1-1.html https://an…

Processing (Java) 中实现2D任意图形的鼠标悬停检测 2D射线检测 模拟按钮 点击事件

引言 如果使用Processing开发应用,画面中需要设定一些按钮,而且这些按钮是不规则图形样式,甚至是以一张图片形式呈现,如何判定其轮廓,定义悬停事件、点击事件是非常核心的算法需求。本文浅析这一问题的通用解决方案。因为Processing是Java衍生语言,同样适合java语言体系。…

运行窗口无法打开软件程序的解决办法

事情起因:  本人安装了 Notepad-- 文本编辑软件,但是通过Win+R,打开运行窗口,输入Notepad-- 无法打开该软件;报错如下: 解决办法  此电脑-属性-高级系统设置-高级-环境变量  在 系统变量 里,找到 Path 变量 添加软件安装路径,并上移 确定保存,电脑重启,系统环…

牛客题解 | 为数据集行创建复合超向量

牛客题库题解题目 题目链接 复合超向量是一种将多个向量组合成一个向量的方法,其计算公式为: \[composite\ hypervector = \sum_{i=1}^{n} w_i \times v_i \]其中,\(w_i\) 是权重,\(v_i\) 是向量。 在本题中,这是一个使用超维计算(HDC)的任务,需要通过以下步骤处理数据…

【设计模式】从事件驱动到即时更新:掌握观察者模式的核心技巧

概述 定义:又被称为发布-订阅(Publish/Subscribe)模式,它定义了一种一对多的依赖关系,让多个观察者对象同时监听某一个主题对象。这个主题对象在状态变化时,会通知所有的观察者对象,使他们能够自动更新自己。 结构 在观察者模式中有如下角色:Subject:抽象主题(抽象被…

【设计模式】探索状态模式在现代软件开发中的应用

概述 【例】通过按钮来控制一个电梯的状态,一个电梯有开门状态,关门状态,停止状态,运行状态。每一种状态改变,都有可能要根据其他状态来更新处理。例如,如果电梯门现在处于运行时状态,就不能进行开门操作,而如果电梯门是停止状态,就可以执行开门操作。 类图如下:代码…

团队展示 (组长:金帝彪)

一、团队介绍 1.1 团队概况 1.1.1 博客展示链接 团队名称,彩虹小分队 https://www.cnblogs.com/JINjin20040207 1.1.2 团队项目描述 健康体重管理平台 1.1.3 队员风采 姓名:金帝彪 风格:谋定后动 擅长的技术:业务分析 编程的兴趣:C 希望的软工角色:业务分析师 一句话宣言:…