node.js学习随笔

来源:互联网 发布:小米官网和淘宝旗舰店 编辑:程序博客网 时间:2024/06/06 04:33
一、node.js与JavaScript的异同
在ECMAScript部分node和js其实是一样的,比如数据类型定义,语法结构,内置对象(原型prototype等)

不同点:
在js的顶层对象是 window (虽然window指向的为global,但是人们无法对global进行直接操作)
在node中的顶层对象为 global,而不是window

二、node中是分模块的,一个文件就是一个模块,每个模块都有自己的作用域
我们使用var来声明一个变量,它并不是全局的,而是属于当前模块下
但是如果使用global,则是全局的
global.num=200;    //注意,前面不能有varconsole.log(__filename);     //返回当前模块文件的解析后的绝对路径,该属性其实并非全局,而是模块作用域下的console.log(__dirname);      //返回当前模块文件所在目录解析后的绝对路径,该属性也不是全局的,而是模块作用域下的。

模块加载使用 require(path) ,参数可以为绝对路径,也可以为相对路径。
绝对路径:require("c:\Users\xyong\WebstormProjects\untitled\module\1.js");
相对路径:require('./1.js');
但是,如果只写文件名,例如 require('1.js'); 则是指的加载node.js中的核心模块,或是node_modules文件夹下的模块,例如url=require('url');


require('./1');
1、模块加载时,首先按照加载模块的文件名称进行查找
2、如果没有找到,则会在模块文件名称后加上.js的后缀,进行查找
3、如果还没有找到,则会在文件名称后加上.json的后缀,进行查找
4、如果还没有找到,则会在文件名称后加上.node的后缀,进行查找
文件名称 -> .js -> .json -> .node 

三、module : 保存提供和当前模块有关的一些信息
console.log(module);

在模块作用域,还有一个内置的模块对象————exports,它其实就是module.exports
console.log(module.exports===exports);   //true
因此,module.exports={}; ,也可以写为 exports={};
注意:建议使用 module.exports={}; , exports 和 module.exports 是相互引用,注意不能 module.exports(或exports)=[1,2,3]; 否则会使它们的相互引用断开。

四、global下的process对象
可以获取当前进程的一些信息,如系统、环境的配置,内存使用情况,退出当前进程等,详情请百度
注意,process中的stdin和stdout,标准输入输出流(IO)。提供了操作输入数据和输出数据的方法,我们也通常称为IO操作
1、process.stdout.write(data);  //输出数据
2、获取键盘输入
//默认情况下,输入流是关闭的,要监听处理输入流数据,首先要开启输入流
process.stdin.resume();
//用于监听用户的输入数据
process.stdin.on('data',function(mess){
console.log('获取到的输入信息为:');
process.stdout.write(mess);
});

五、Buffer类
Buffer类是全局的,不需要使用require导入
用于操作二进制数据流,常用于读取文件内容
Buffer存储的是字节信息,每个字节是八位二进制,使用两位十六进制表示。
一、创建Buffer类,一共有三种方式
注意:转换成的数据都是十六进制的。
1、new Buffer(size);  
size [Number] 创建一个Buffer对象,并为这个Buffer分配一个大小。当我们为一个Buffer对象分配空间大小以后,其长度是固定的,不能更改。
var buffer=new Buffer(5);
buffer[7]=10;
console.log(buffer);

2、new Buffer(array);
array中的数据,即为生成的Buffer中的数据。并且,其长度是固定的,不能更改。
var buffer=new Buffer([1,2,3]);
buffer[5]=10;
console.log(buffer);

3、new Buffer(string,[encoding]);
第一个参数为字符串,第二个参数为编码格式。编码格式默认为utf-8
var buffer=new Buffer('xyong is god');
console.log(buffer);
var buffer1=new Buffer('xyong is god','utf-8');
console.log(buffer1);

二、输出储存的Buffer数据
var buffer=new Buffer('xyong is god');
//length为字节的长度,而不是字符的长度。例如'你好',字符长度为2,但是字节长度为6.
for(var i=0;i<buffer.length;i++){  
//console.log(buffer[i]);  //此时输出的数据转换为10进制
//输出的为十六进制对应的字符,即储存的信息
console.log(String.fromCharCode(buffer[i]));  
}

三、Buffer对象方法
1、使用 write() 方法,
buffer.write(要传入的字符串,Buffer的开始位置,Buffer的长度,编码方式encoding);
var buffer=new Buffer(5);
var val='test message';
buffer.write(val);   //因为Buffer的大小为5,所以只能传入5个字符
2、使用 toString() 方法
使用 toString() 可以使用下标,选择性输出Buffer对象的值,
注意:这里的下标指的是字节,一个汉字为3个字节
var buffer =new Buffer('test message');
console.log(buffer.toString());
console.log(buffer.toString('utf-8',1,3));   //包头不包尾
3、使用 toJSON() 方法
返回一个JSON表示的Buffer实例,JSON的第一个值为类型,第二个值为数据。
4、使用 slice() 方法
var buffer1=buffer.slice([start],[end]);
注意:新的buffer1将和老的buffer引用相同的内存地址。即改一个会改变另一个。
原创粉丝点击