欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Nodejs函数声明、调用、箭头函数、高阶函数、Set集合、事件处理机制、全局对象

程序员文章站 2022-06-12 21:45:54
...

一、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)}`);