day31 ES6

69 阅读2分钟

*解构赋值:- 三阶段必用

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

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

		3、*调用函数时,传入实参的顺序无所谓了
			function zwjs({name,age,hobby}){
				return `我的名字叫${name}今年${age}岁喜欢${hobby}`
			}
			console.log(zwjs({age:18,hobby:"学习",name:"袍哥"}));

			以后但凡你碰到了某个API,里面允许你传入的是一个对象,而且传入的键值对的顺序不重要,它的底层一定就是解构赋值

		4、函数的return原本只能有一个,return的本意是退出函数
			function f1(){
				var name="袍哥";
				var age=18;
				return [name,age];
			}
			var [name,age]=f1();

Set和Map新的数据类型(Set可以去重)

1Set:非常的类似数组,只允许传入数组参数,最大的最用就是数组去重,然后还要转回数组才能使用更多的API
		创建:var s=new Set(arr);
		转回数组:var arr=[...s];//...扩展运算符,悄悄的解开数组的结构,也就是那个中括号没了
		其余API:可以直接看原型,一眼就能看得懂。
    <script>
        let arr = [1, 2, 3, 4, 5, 1, 2, 3, 4, 5, "倚", "天", "屠", "龙", "记", "倚", "天", "屠", "龙", "记", "倚", "天", "屠", "龙", "记"]
        var s=new Set(arr)
        console.log([...s]);
    </script>

2Map:非常的类似对象,但是是真没用
		创建:var m=new Map();
		添加:m.set("属性名","属性值");
		获取:m.get("属性名");
		其余API:可以直接看原型,一眼就能看得懂。

*class关键字

class关键字:简化面向对象开发(封装、继承、多态) - 三阶段:react框架时会用到的
			//创建一个类,名为flyer
			class flyer {
				constructor(name,speed){//constructor里面是自有
					this.name=name;
					this.speed=speed;
				}//共有
				fly(){
					return `${this.name}正在以时速${this.speed}飞行`
				}
				
			}
			//创建一个类,名为plane,继承自了flyer
			class plane extends flyer{
				constructor(name,speed,zk){
					super(name,speed);//super会悄悄的调用你继承的那个类的constructor
					this.zk=zk;
				}
				fly(){
					return `${this.name}正在以时速${this.speed}飞行可以载客${this.zk}人`
				}
			}

*ES6模块化开发

*ES6模块化开发:作用:分工合作,每个js都是一个模块,每个工程师都可以单独开发自己的模块
		1、子模块要公开
			export var obj={}

		2、主模块要引入,刚好巧了,Node也可以用这句话,因为Node只是不支持DOMBOM而已
			import {obj as 别名} from "./子模块路径.js"
			注意:
				1、用了别名,原名就不可以使用了
				2、./和.js是不可以省略不写的

		3HTML要引入主模块
			 <script src="主模块文件" type="module"></script>

*Promise

Promise:承诺:以后你在使用异步代码时,但是也有希望能够保证执行顺序的时候,使用Promise --  三阶段不会自己写,但是三阶段学习的API会带有此功能
			function ajax1(resolve){//渲染头部
				setTimeout(()=>{
					console.log("11111111111111111111111111111111");
					resolve();//放行
				},Math.random()*5000);
			}
			
			function ajax2(){//渲染身体
				return new Promise((resolve)=>{
					setTimeout(()=>{
						console.log("22222222222222222222222222222222");
						resolve();//放行
					},Math.random()*5000);
				})
			}
			
			function ajax3(){//渲染底部
				setTimeout(()=>{
					console.log("33333333333333333333333333333333");
				},Math.random()*5000);
			}
			
			new Promise(ajax1).then(ajax2).then(ajax3);//是不是5秒?每次都是重新开始的5s内 
			
			//希望,异步(不要卡住后续代码),但是又要保证顺序(1、2、3)
			
			console.log("后续代码");