ES6补充

189 阅读2分钟

ES6:

1、块级作用域:let 变量名=值;

 好处:1、解决了声明提前
       2、添加了块级作用域:{}
       3、循环绑定事件时会自动记录住下标

2、模板字符串:

``我的名字叫${name}`

3、箭头函数:简化回调函数

简化规则:去掉function,在()和{}之间添加=>,形参如果只有一个可以省略小括号
	  函数体只有一句话,省略{}
	  函数体只有一句话,并且是return,{}和return都省略

4、for...of

for(var v of arr){
	v;//当前值
}

缺点:1、不能修改原数组
      2、只能遍历索引数组,不能遍历hash数组,也不能遍历对象

5、解构赋值

顾名思义:解析结构后进行赋值 - 赋值的新方式,并且得到了增强
如果赋值符号,左右两边的结构一样,就会悄悄地脱掉结构再一一的进行赋值
语法:
  1、像数组一样的解构赋值
	var [a,b,c]=[1,2,3];

  2、像对象一样的解构赋值
	var {a,b,c=默认值}={c:值,b:值,a:值};

  3、调用函数时,传递实参的顺序无所谓了 - 但底层还是像对象一样的解构赋值
		function zwjs({name="无名氏",age=0,hobby="无"}){
			return `我的名字叫${name},今年${age}岁,喜欢${hobby}`;
		}
		
		console.log(zwjs({age:18,hobby:"睡觉",name:"蔡皓蓝"}));
		console.log(zwjs({}));

  4、函数的返回的结果,可以有多个
		function f1(){
			var a=1,b=2;
			return [a,b];
		}
		var [res1,res2]=f1();
		console.log(res1);
		console.log(res2);

6、Set和Map数据类型

   *Set:类似于数组的数据类型 - 也适用于保存数据的,但是没有数组提供的操作多
创建:var s=new Set();
   *去重数组:var s=new Set(arr);
将set变为数组:var newArr=[...s]

Map:类似于对象的数据类型 - 也适用于保存数据的,但是他比对象还要复杂麻烦
创建:var m=new Map();
添加:m.set("属性名","属性值");
获取:m.get("属性名");

7、*****class关键字:- react框架会用到

目的:简化了面向对象的三大特点(封装、继承、多态)
案例:
		class Flyer{
			constructor(name,speed){//就是以前的构造函数,里面放着自有属性
				this.name=name;
				this.speed=speed;
			}//外面就是原型 - 放共有方法
			fly(){
				return this.name+"正在以时速"+this.speed+"公里飞行";
			}
		}
		
		class Plane extends Flyer{//extends:继承:继承到构造函数里面自有属性以及共有方法
			constructor(name,speed,count){//就是以前的构造函数,里面放着自有属性
				super(name,speed);//super方法会自动去调用你继承的类的constructor方法
				this.count=count
			}//外面就是原型 - 放共有方法
			fly(){//多态
				return this.name+"正在以时速"+this.speed+"公里飞行,可以坐"+this.count+"人";
			}
		}

8、***模块化开发 - 目的:分工合作

主模块:引入:import {obj as 取别名} from "./文件路径.js"
	注意:1、.js后缀不能省略
	      2、取了别名,原名不能使用了

分支模块:公开:export var obj={公开你想要公开的内容}

HTML页面:引入时:<script src="主模块" type="module"></script>

9、*****Promise:对异步进行了承诺、保证

异步的特点:不会卡住后续代码,所以多个异步同时执行,分不清谁先谁后

		function dsq1(resolve){
			setTimeout(()=>{
				console.log("111")
				resolve();
			},Math.random()*1000);
		}
		function dsq2(){
			return new Promise((resolve)=>{
				setTimeout(()=>{
					console.log("222")
					resolve();
				},Math.random()*1000);
			})
		}
		function dsq3(){
			return new Promise(resolve=>{
				setTimeout(()=>{
					console.log("333");
					resolve();
				},Math.random()*1000);
			})
			
		}
		
		function dsq4(){
			return new Promise(resolve=>{
				setTimeout(()=>{
					console.log("444")
				},Math.random()*1000);
			})
		}
		
		new Promise(dsq1).then(dsq2).then(dsq3).then(dsq4);