上一篇博客,我们对node的模块机制有了一点了解。那时候我们知道node中的全局对象是global而不是browser中window的一些属性和方法是一样的,比如:clearInterval/clearTimeout/setInterval/setTimeout/console。它们的用法和在浏览器中是一样的,那么我们就来看看node.js特有的全局属性和方法吧。我们先跑一点看看上一篇博客介绍的模块系统相关的两个属性,或者模块的路径:__filename:解析后返回当前模块文件的绝对路径__dirname:返回当前解析后的绝对路径解析模块文件所在目录注:可以直接使用,但实际上不是全局的,而是直接在模块作用域下的文件中输入,输出可以通过运行:console。log(__filename);console.log(__dirname);进程对象进程对象的属性和方法进程对象是一个全局对象,可以在任何地方访问。通过这个对象提供的属性和方法,我们可以监控当前运行程序的进程,用于访问和控制process.argv:一个包含命令行参数的数组。第一个元素将是“节点”,第二个元素将是.Js文件的名称。接下来的元素依次是在命令行中传入的参数。process.execPath:打开当前进程的绝对路径process.env:返回用户环境信息对象process.version:返回节点版本信息process.versions:返回节点和节点依赖包版本信息process.pid:当前进程的pidprocess.title:当前进程的显示名称(Getter/Setter)process.arch:返回当前CPU处理器架构arm/ia32/x64process.platform:返回当前操作系统平台process.cwd():返回当前进程的工作目录process.chdir(directory):更改进程当前进程的工作目录,如果操作失败则抛出异常。process.memoryUsage():返回byteprocess.exit(code)中节点进程的内存使用情况:exitsprocess.kill(pid):向进程发送信息标准输入/输出流(IO):stdin和stdout提供操作输入数据和输出数据的方法也就是通常所说的IO操作stdin:标准输入http://baike.baidu.com/view/6...stdout标准输出http://baike.baidu.com/view/6...这里主要是对标准输入/输出流(IO)的理解,放一个中文维基百科的解释:standardinput/outputstream,这里有一个关于stdout的console.log实现的简单例子:console.log=function(d){process.stdout.write(d+'\n');};看一个stdin的简单例子:process.stdout.write('Pleaseentercontent:');//默认情况下,输入流是关闭的。监听和处理输入流数据,首先要开启输入流process.stdin.resume();//用于监听用户的输入数据12process.stdin.on('data',function(chunk){console.log('用户输入:'+chunk);});shell执行文件后,输入内容回车,就会打印出你输入的内容。缓冲类什么是缓冲类?Buffer类是一种全局变量类型,用于操作二进制数据流。当我们操作文件或网络数据时,实际上是在操作二进制数据流。Buffer类是Node为了我们更好的操作二进制数据而创建的类。newBuffer(size):Number类型,新缓冲区大小为size8位byte.newBuffer(array):Array类型使用8位数组array.newBuffer(str,[encoding]):分配一个包含给定str字符串的新缓冲区。默认的编码方式是:'utf8'。str:String类型——需要存放在缓冲区中的string字符串。encoding:String类型——使用什么编码方式,参数可选。Buffer方法学习buf.length:this缓冲区的字节大小。请注意,这不一定是缓冲区内容的大小。长度基于缓冲区对象分配的内存值,不会随着缓冲区对象内容的变化而变化。buf.write(string,[offset],[length],[encoding]):根据参数offset偏移量和指定的编码方式,长度length为要写入的字符串的字节大小,写入参数字符串数据进入缓冲区。string:Stringtype-要写入缓冲区的数据offset:Number类型,可选参数,默认:0length:Number类型,可选参数,默认:buffer.length-offsetencoding:String类型,可选参数,默认:'utf8'varstr='缓冲区';console.log(newBuffer(str));varbuf=newBuffer(6);buf.write(str,1,3);console.log(buf);//<缓冲区627566666572>//这里我们指定了offset和length,分别是1和3,所以可以看到两个输出,62,75,66,这部分是一样的,第二次是输出它的位置移动1个位置。buf.toString([encoding],[start],[end]):根据编码参数返回解码后的字符串类型(默认为'utf8')。取值范围也会根据传入参数开始(默认为0)和结束(默认为buffer.length)。encoding:String类型,可选参数,default:'utf8'start:Number类型,可选参数,default:0end:Number类型,可选参数,default:buffer.lengthvarstr1='buffer';varbf1=newBuffer(str1);console.log(bf1.toString());console.log(bf1.toString('utf8',1,4));varstr2='binary';varbf2=newBuffer(str2);console.log(bf2);console.log(bf2.toString('utf8',1));//buffer//uff////16进制这里通过例子和输出,你可以发现toString()方法在截取的时候看到取的是左边而不是右边,所以第一个例子输出的是uff,第二个例子可以看出中文使用3个字节来存储,所以在partial偏移量为1的时候,读取的ba8c输出为乱码。当offset为3时,是正常的。buf.toJSON():返回一个由JSON表示的Buffer实例。默认情况下将调用JSON.stringify以字符串序列化此Buffer实例。如:{type:'Buffer',data:[98,117,102,102,101,114]}buf.slice([start],[end]):返回一个新的buffer,这个buffer会一样作为旧缓冲区引用相同的内存地址,但索引被偏移和裁剪,类似于数组。负索引从缓冲区的末尾开始计数。buf.copy(targetBuffer,[targetStart],[sourceStart],[sourceEnd]):复制缓冲区,源和目标可以重叠。targetStart目标起始偏移量和sourceStart源起始偏移量默认都是0。sourceEnd源结束位置偏移量,默认为源buffer.length的长度。如果传递的值是undefined/NaN或者outofbounds超过了边界,就会被设置为它们的默认值。(译者:这个默认值在下面的一些例子中解释)targetBuffer:Buffer类型对象-要复制的BuffertargetStart:Number类型,可选参数,default:0sourceStart:Number类型,可选参数,default:0sourceEnd:Number类型,可选参数,default:buffer.length类/静态方法Buffer.isEncoding(encoding):用于测试给定的编码字符串,如果给定的encoding编码有效,则返回true,否则返回false:Buffer。isEncoding('utf8')Buffer.isBuffer(obj):测试这个obj是否是一个Buffer.Buffer.byteLength(string,[encoding]):会返回这个字符串的实际字节长度。默认编码编码为:'utf8'。这与String.prototype.length不同,因为该方法返回此字符串中的字符数。Buffer.concat(list,[totalLength]):返回一个缓冲区对象,它将传递的缓冲区数组中的所有缓冲区对象连接在一起。其实数组中的所有buffer实例都是通过复制list拼接在一起的:{Array}数组类型,Buffer数组,用来连接。totalLength:{Number}type上述Buffer数组中所有Buffer的总大小。(数组中Buffer实例的大小总和)这里我们回过头来看。在process对象介绍的前半部分,在讲标准输入输出流的时候,我们有这样一个例子:process.stdout.write('PleaseInputcontent:');//默认输入流关闭了。监听和处理输入流数据,首先要开启输入流process.stdin.resume();//用来监听用户的输入数据12process.stdin.on('data',function(chunk){console.log('用户输入:'+chunk);});我们运行这段代码,在命令行输入:process,可以看到如下结果:Pleaseenterthecontent:processTheuserinput:process从这里,我们收到的用户输入chunk是一个字符串,实际上是一个缓冲对象,我们重写了porcess.stdin方法,process.stdin。on('data',function(chunk){console.log(chunk);});输入同样的内容,打印出,可以知道在标准输入输出流中,其实也是进行二进制数据传输的。在第一个例子中console.log('Theuserentered:'+chunk);由于块链接到字符串,它实际上会自动调用toString()方法。这是对进程对象和Buffer类的简单学习,理解比较肤浅。有错误请指出,谢谢!本文地址:https://guowenfh.github.io/2016/10/15/node-global-object/