async await
//异步请求数据
async function fn(){
const data = await axios.get(url);
}
class 类
1、在创建使用类的时候,多打印类和实例化对象,可以在他们的原型上找到很多关键性的内容;
2、构造函数constructor可以不写,一般实例化对象时传参,初始化使用。
3、子类继承父类时要想继承父类的constructor中的内容,必须在子类的constructor中加上super(),不继承则可以不写
class Person{
constructor(){
this.name=name;
this.age=age
}
//类的一般方法
say(){
console.log(this.name,this.age);
}
}
let person = new Person("zhangsan",18);
person.say();
//子继承父
class Student extends Person{
constructor(name,age,salary){
super(name,age); //调用父类的构造方法
this.salary = salary
}
say(){
console.log(this.name,this.age,this.salary); //自己的方法中可以用自己的salary,父类的没有,调不到
}
}
let student = new Student("lisi",20,10000);
student.say(); //调用自己say方法,如果自己没有就会调用父类的方法
数组方法的扩展
Array.from(arr); //把伪数组arr转化为真数组
Array.of(val1,val2,val3); //把一系列值转为数组
arr.find(function(value,index){ //找出数组中第一个大于3的元素
return value>3;
});
arr.findIndex(function(value,index){ //找出数组中第一个大于4的元素的索引
return value>4;
})
Array.from(new Set(arr)); //数组去重
let arr =[1,2,3];
console.log(arr.includes(1));// true //判断数组中是否包含某个元素,(字符串对应字符串,number类型对应number类型)
对象方法的扩展
Object.is(v1,v2); //判断两个数据是否完全相等,(字符串形式比较)
Object.is(NaN,NaN); //true
Object.is(0,-0); //false
Object.assign(target,source1,source2); //将source对象属性复制到目标对象target上
let obj3 = {money:10000};
let obj4={};
obj4.__proto__ = obj3; //es6中可以在隐式原型上操作
console.log(obj4.money);
set 和map
let set = new Set([1,2,3,4,6,3,4]);
console.log(set); //去重后的伪数组
set.add(7); //向去重后的伪数组尾部加一个7
set.delete(5); //删除,成功返回true失败返回true
set.has(5); //判断有没有,有返回true ,没有返回false
Array.from(new Set(arr)); //伪数组转化为真数组
*********************************************************************************
let map = new Map([["zhangsan",18],[20,"lisi"],['a','b','c']]);
处理二维数组,把数组转化为键值对形式 “zhangsan”=》18,20=》“lisi”,a=》b (c被忽略)
map.set(key,value);
map.delete(key);
map.get(key);
map.has(key);
map.clear(); //清空
深度克隆,主要针对数组,对象
JSON.stringify();
JSON.parse();
里面放的是对象或数组是没问题的,放函数会出错,函数转化后变为null
浅拷贝:拷贝的是引用地址,修改拷贝后的数据会影响原数据
深拷贝:修改拷贝后的数据不影响原数据
**有数组/对象就继续遍历数组/对象,拿到里面的每一项值,一直拿到基本数据类型为止,然后复制,就是深拷贝**
Object.prototype.toString.call(给的数据) ==='[object 数据类型]'
**定义检测数据类型的功能函数**
function checkedType(target){
return Object.prototype.toString.call(target).slice(8,-1);
}
**实现深度拷贝**
初始化变量result,成为最终克隆的数据
function clone(target){
let result,targetType = checkedType(target);
if(targetType==“Object”){
result = {};
}else if(targetType=="Array"){
result = [];
}else{
return target;
}
//遍历目标数据
for(let i in target){
//获取每一项值
let value= target[i];
//判断目标结构里的每一项值是否存在对象或数组
if(checkedType(value)==='Object' || checkedType(value)==='Array'){
//继续遍历获取value值
result[i] = clone(value);
}else{ //获取的值是基本数据类型或者函数
result[i]=value;
}
}
return result;
}