Nodejs函数声明、调用、箭头函数、高阶函数、Set集合、事件处理机制、全局对象
一、Set集合
Set集合是无序、不重复的数据集合。集合中成员不重复,都是唯一的。
1、基本方法
add(x)
:添加值
has(x)
:判断x是否在集合中,返回布尔型
delete(x)
:删除集合中的元素
clear()
:清空集合
console.log(s1.keys())
:通过迭代器(遍历器Iterator)来遍历集合中的元素
console.log(s1.values())
:Set集合没有键只有值(即键和值是相同的),因此keys遍历和values遍历结果是一样的
console.log(s1.entries())
:遍历键值对
2、遍历的使用:
A、[...集合名]
B、map遍历:
set = new Set([...set].map(x => x*2)
) :通过map遍历集合中的元素,让每个元素乘以2
C、filter过滤集合元素
set = new Set([...set].filter(x => (x%2)==0));
:遍历set集合,并将集合中的偶数全部过滤出来
二、WeakSet集合
1、集合中的元素只能是对象,不能是其他类型
2、Node的垃圾回收机制,不考虑WeakSet中元素的回收。
let ws = new WeakSet({"name":"张三"})
三、函数
1、函数的声明
function 函数名([参数]){
函数体语句;
}
ES6支持默认参数的函数
2、函数的调用
事件名 = 函数名([参数])
注意: 默认参数函数的应用:
//默认参数的函数
function testArgs(x=21,y=19) { //x,y参数带有默认值
return x+y;
}
//调用函数
let s1 = testArgs();
console.log("无参函数的调用结果:"+s1);
let s2 = testArgs(78,56);
console.log("有参函数的调用结果:"+s2);
let s3 = testArgs(120);
console.log("传一个参数:"+s3);
3、ES6中的rest参数
ES6中的rest参数可以替代ES5中的arguments对象。
function testSum(...values) {
let sum = 0;
for(let k of values){
sum = sum+k
}
return sum;
}
console.log("rest参数:"+testSum(2,4,6))
4、匿名函数
匿名函数:在声明函数时省略函数名。
var 变量名 = function([参数]){
函数体语句;
}
强调:
形参:形式上的参数,只是占位符。通常在函数定义(声明)时出现函数首部。
实参:实在参数,在函数调用时出现在函数首部的参数。
5、箭头函数
箭头函数:使用箭头符号(=>)声明的函数。
var 变量名 = ([参数])=> {
函数体语句;
}
若函数体语句只有一条,可以省略’{}'
6、高阶函数
高阶函数:把函数作为参数的函数。
//高阶函数:把abs函数作为参数
function diffAvg(m,n,fn){
return fn(m-n);
}
//高阶函数的调用:
let k = diffAvg(45,78,Math.abs)
console.log("高阶函数:"+k);
7、闭包
闭包:函数作为返回值或作为参数传递时。
var basePrice = 10.00; //起步价
var baseMiles = 3.00; //起步里程
function taxiPrice(unitPrice,Mileage) {
function totalPrice() { //计算总费用
if(Mileage > baseMiles){
return Mileage*unitPrice; //里程大于起步里程
}else{
return basePrice; //里程小于等于起步里程
}
}
return totalPrice(); //将计算的总费用返回。将函数作为返回值
}
console.log("出租费用:"+taxiPrice(2.00,6))
四、JavaScript的代码规范
1、编码格式
(1)每条JavaScript语句都以分号结束。建议每行只有一条语句
(2)缩进使用2个半角空格或4个半角空格,而不使用Tab键。
(3)每行仅声明一个变量,而不要声明多个变量。
(4)字符串尽量使用单引号
(5)符号“{”应在行末,表示代码块的开始,符号“}”应在行首,表示代码块的结束
2、命名规范
(1)变量名采用小驼峰命名法(除第一个单词之外,其他单词首字母大写)
(2)常量全部采用大写
(3)函数名也采用小驼峰命名法,第一个单词采用动词
(4)类和构造函数名采用大驼峰命名法(每个单词的首字母都是大写),第一个单词使用名词
(5)文件名采用下划线分割单词
五、Node事件处理机制
1、事件队列:将事件放入事件队列
2、事件循环机制:对事件队列中的事件进行轮询、检查,依次处理每个事件
3、事件监听:
(1)引入事件模块:events
(2)创建事件监听对象:EventEmitter
(3)注册监听:监听不同类型的事件(使用on函数)
(4)、触发事件:使用emit函数
六、Node的全局对象
1、全局属性
(1)__filename
:指的是当前正在执行的脚本文件的名字
(2)__dirname
:指的是当前正在执行的脚本文件目录(路径)
2、全局对象
(1)console实例对象:
console.log("字符串")
:输出到标准终端
console.error()
:输出错误信息
(2)process:进程对象
A、process.stdout
:输出对象,该对象下的write方法的作用与console.log()相同
B、proce.stdin
:输入对象,利用该对象可以从标准输入终端向node程序输入数据
3、全局函数
(1)setTimeout(cb,ms):cb表示一个回调函数,ms表示时间(单位是毫秒);表示至少多少毫秒以后调用函数返回一个可以清除的计时器对象。
(2)clearTimeout(计时器对象):清除由setTimeout创建的计时器
(3)setInterval(cb, ms):至少多少毫秒以后重复运行回调函数cb
(4)clearInterval(计时器对象):清除由setInterval创建的计时器
(5)setImmediate(cb):即时计时器,该计时器的运行没有时间间隔,创建即运行;返回计时器对象
(6)clearImmediate(计时器对象):清除由setImmediate创建的计时器
七、Buffer数据类型
1、专门用于处理二进制数据的对象(接口);Node原生创建,可以直接使用不需要导入
2、Buffer对象又称为缓冲区对象,它有一个构造函数,由构造函数创建的对象,v8引擎会为其分配一块内存
3、Buffer中存放的数据是0~255之间的整数值(即一个字节的数据)
4、创建Buffer实例的方法:
(1)使用new运算符
var 变量 = new Buffer([参数])
(2)使用from函数
var 变量 = Buffer.from([参数])
(3)使用alloc函数
var 变量 = Buffer.alloc(size,fill)
5、将Buffer中的数据转换为字符串:使用toString函数,需要指定字符集(编码格式).
console.log(buf6.toString('utf8',0,4));
6、将Buffer转换为JSON对象
(1)JSON(JavaScript Object Notation)对象:是前后端数据交换的常用格式,是以key-value的方式保存数据,由于体积小、创建方便、解析简单,所以被广泛使用.只要应用程序需要将结构化信息作为文本进行交换或存储,即可使用它。
(2)使用Node的JSON对象进行转换:
var json = JSON.stringify(buf);
7、向Buffer中写入数据:
const buf8 = Buffer.alloc(256);
let len = buf8.write('\u00bd+\u00bc=\u00be',0); //write函数的返回值是写入的字节数
console.log(`${len}个字节:${buf8.toString('utf8',0,len)}`);