*解构赋值:- 三阶段必用
顾名思义:解析结构后进行赋值 - 赋值的新方式,并且得到了增强
如果赋值符号,左右两边的结构一样的,就会悄悄地解开/脱掉结构再一一的进行赋值
语法:
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可以去重)
1、Set:非常的类似数组,只允许传入数组参数,最大的最用就是数组去重,然后还要转回数组才能使用更多的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>
2、Map:非常的类似对象,但是是真没用
创建:var m=new Map();
添加:m.set("属性名","属性值");
获取:m.get("属性名");
其余API:可以直接看原型,一眼就能看得懂。
*class关键字
class关键字:简化面向对象开发(封装、继承、多态) - 三阶段:react框架时会用到的
class flyer {
constructor(name,speed){
this.name=name;
this.speed=speed;
}
fly(){
return `${this.name}正在以时速${this.speed}飞行`
}
}
class plane extends flyer{
constructor(name,speed,zk){
super(name,speed);
this.zk=zk;
}
fly(){
return `${this.name}正在以时速${this.speed}飞行可以载客${this.zk}人`
}
}
*ES6模块化开发
*ES6模块化开发:作用:分工合作,每个js都是一个模块,每个工程师都可以单独开发自己的模块
1、子模块要公开
export var obj={}
2、主模块要引入,刚好巧了,Node也可以用这句话,因为Node只是不支持DOM和BOM而已
import {obj as 别名} from "./子模块路径.js"
注意:
1、用了别名,原名就不可以使用了
2、./和.js是不可以省略不写的
3、HTML要引入主模块
<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);
console.log("后续代码");