Node的模块化管理(CommonJs的规范与特点)、Buffer对象(缓冲区)的使用场景

本文介绍了Node.js的模块化管理,遵循CommonJS规范,详细解析了Module对象、require命令及其使用规则。同时,文章深入探讨了Buffer对象,它是处理二进制数据的关键,包括构造函数、常用函数及实例属性,强调了使用Buffer的最佳实践。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

目录

一、Node的模块化管理

二、Node的Module对象

        1. 在node内部定义了一个Module构造函数,构造函数的属性:

        2、exports变量:该变量指向module.exports(返回为对象),

            作用是方便用户的操作

强调:不能直接给exports赋一个值,这样就切断了exports与module.exports之间的连续。不能进行导出了

三、require命令:是node的内置命令,主要用于加载模块文件

        1、作用:导入并运行JavaScript文件,返回的是exports对象

        2、加载规则:

四、Buffer对象

五、Buffer构造函数

六、Buffer常用的函数(buffer的类成员)

七、buffer的实例属性

强调:使用Buffer时注意的问题:在创建Buffer对象时,node建议使用以下两个方法,而不建议使用new

八、实例成员与类成员的含义


一、Node的模块化管理

        1、模块化:node应用程序由模块组成。遵循的是CommonJS模块规范。使用模块管理的好

        处是隔离模块的作用域,避免出现命名冲突。

        2、什么CommonJS是一套代码的规范,构建一个在浏览器之外的JavaScript语言的生态

        系统。

        3、CommonJS规范的主要内容

        (1)通过module.exports导出对外的变量或接口

        (2)通过require将其他模块导入到当前模块的作用域中

        4、CommonJS的特点:

​        (1)所有模块都运行在当前模块的作用域中,不会污染全局作用域

        (2)模块是同步加载,根据文件中模块出现的顺序依次加载

        (3)模块可以多次加载,但只有在第一次加载时运行,其他的加载会放入缓存中,后面再使

                用时直接从缓存中读取

二、Node的Module对象

        1. 在node内部定义了一个Module构造函数,构造函数的属性:

        (1)id:表示模块的标识符

        (2)parent:表示调用模块的模块 

        (3)exports:表示导出的值

        (4)paths:表示模块(第三方模块)的查找路径。

        当前目录的node_modules —>父目录的node_modules—->…..—>根目录下的node_modules

         (5)path:当前模块所在的路径

        (6)filename:当前模块所在的文件名

        强调:在CommonJS规范中所有的模块都是Module的实例(对象)

        2、exports变量:该变量指向module.exports(返回为对象),

            作用是方便用户的操作

exports.arae = function(r){//返回为Module的对象属性
    return (Math.PI * r **2).toFixed(2);
};
console.log(exports);// { arae: [Function (anonymous)] }

强调:不能直接给exports赋一个值,这样就切断了exports与module.exports之间的连续。不能进行导出了

三、require命令:是node的内置命令,主要用于加载模块文件

        1、作用:导入并运行JavaScript文件,返回的是exports对象

        2、加载规则:

        (1)加载文件的默认后缀名是:.js

​         (2)如果参数字符串以’/‘开头,表示加载的文件是位于绝对路径下的文件

​         (3)如果参数字符串以’./‘开头,表示加载的文件是位于相对路径下的文件

​         (4)如果参数字符串不以“./“或”/“开头,则表示加载的是一个默认提供的核心模块(位于

                  Node的系统安装目录中),或者一个位于各级node_modules目录的已安装模块(全

                  局安装或局部安装)。

        四、Buffer对象

                1、作用:是Node提供的处理二进制数据的对象。是node的内置对象,在使用时不需要

                                安装可以直接使用,不需要require('buffer')加载;

                2、使用的原因:JavaScript处理字符串的功能非常强大,但在二进制数据处理方面能力

                     很弱。因此node就内置了Buffer对象专门处理二进制数据。Buffer是构造函数,可以

                     使用new创建Buffer的对象,浏览器的js引擎会为Buffer的对象分配内存空间,类似于

                     数组。

let buf = new Buffer(259); //256表示buf有259个单元,类似于数组,下标的范围在0~258之间
console.log(buf);


//强调:buf的每个单元存放的数据必须是0~255之间的整数值。即Buffer的每个单元就是一个字节

                3、Buffer对象可以和字符串进行互换

        五、Buffer构造函数

                (new Buffer()  构造函数已被弃用,有新的语法代替)

                1、给构造函数传递整数:表示分配多少个字节的存储空间

let bytes = new Buffer(5);//表示给bytes分配5个字节的储存空间

                2、给构造函数传递数组:数组的成员必须是整数值

let bytes = new Buffer([0x10,0x48]); //将数组传递给Buffer构造函数

                3、给构造函数传递字符串:默认的编码格式是utf8

let b1 = new Buffer("你好!",'utf8');
console.log(b1.toString());

        六、Buffer常用的函数(buffer的类成员)

                1、Buffer.isEncoding(字符集):参数’字符集’就是字符的编码格式(ASCII、utf8、

                     base64)。作用是判断Buffer的字符集是否是给定的字符集,如果是函数返回true,不

                     是函数返回false

                2、Buffer.isBuffer( buffer ):

                      参数是一个Buffer的对象,判断参数是否是一个Buffer的实例

                3、Buffer.byteLength( buffer ):返回字符串实际占有字节长度

        七、buffer的实例属性

                        1、length:表示Buffer对象的长度(单元个数)

                        2、Buffer的实例方法

                       (1)write(value,index):向Buffer对象中写入数据

                                ​ 参数value:表示写入的值

                                参数index:表示写入的位置。可以省略

强调:使用Buffer时注意的问题:在创建Buffer对象时,node建议使用以下两个方法,而不建议使用new

(1)Buffer.alloc(number,fill,encoding),返回一个Buffer对象

        参数number:必须是整数,代表buffer的单元个数

​         参数fill:表示填充数据。默认值为0

        参数encoding:若填充数据是字符串,用来指定字符集(编码格式),默认值是utf8

(2)Buffer.from(args1,args2),返回一个Buffer对象

        参数args1:可以是字符串,也可以是数组

        参数args2:若第一个参数是字符串,则用来指定字符集。

            八、实例成员与类成员

                   1.  实例成员:在实例化的过程中,可以被所有对象共享的属性或者方法

                   2.  类成员:静态成员。

                        是通过类名直接访问,不属于某个具体的对象,而为类的所有对象共享的

                                           

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值