es6(es2015)常用的方法(三)async(es2017) class类 数组/对象扩展 深度克隆实现

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”=1820=》“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;
}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值