1、es6中箭头函数的理解
箭头函数内的this是静态的,总是指向定义时所在的对象,而不是调用时,并且this指向是不可改变的
箭头函数不能当作构造函数,也就是不可以用new命令,会报错
箭头函数不存在arguments对象,也就是不能使用伪数组去接收参数,可以使用rest参数代替
2、es6中的rest参数
用于获取函数多余的参数,形式:(...变量名),把一个分离的参数序列整合为一个数组,值是一个数组
rest参数只能放在最后一个
3、es6中数组和对象的解构
解构:一种提取数据的方式
数组的解构:以元素位置为匹配条件
let [a, b, c] = [1, 2, 3];
对象的解构:以属性名称为匹配条件
let obj = {name: '李华', age: 26, children: {name1: '李明', age1: 2}};
let {name, age, children: {name1, age1};
4、es6中对promise的理解
//promise是异步编程的一种解决方案
/*
三种状态:pending(进行中),fulfilled(已成功),rejected(已失败)
特点:状态不受外界的影响,只有异步操作的结果,决定当前是哪一种状态
一旦状态改变就不会再变(pending-->fuilled,pending-->rejected)
用法:Promise是一个构造函数,用来生成Promise实例
Promise构造函数是接收一个函数作为参数,这个函数有两个参数
*/
// const p = new Promise(function (resolve, reject) {
// //resolve函数:将Promise对象的状态从未完成变成成功,在一部操作成功时候调用
// resolve()//返回异步操作的结果,作为参数传递出去
// //reject函数:将Promise对象的状态从未完成变成失败,在异步操作失败的时候调用,
// reject()//返回异步操作的结果,作为参数传递出去
// })
//Promise实例方法
//then()
const p = new Promise(function(resolve, reject) {
setTimeout(() => {
const time = new Date().getTime()
if(time%2 == 0) {
resolve('成功的数据time=' + time)
}else{
reject('失败的数据time=' + time)
}
}, 1000)
})
// p.then((value) => {//resolved(已成功)的状态
// console.log(value);
// },
// // (reason) => {//rejected(已失败)的状态
// // console.log(reason);
// // }
// ).catch((value) => {
// console.log(value)
// })
//catch(): 用于指定发生错误的回调函数,一般来说通过catch替代then中第二个参数
//finally:用来指定不管Promise对象状态最后如何,都会执行的操作
p.then((value) => {
console.log(value);
}).catch((value) => {
console.log(value);
}).finally(() => {
console.log('最后的结果');
})
5、es6中对promise.all的理解
//用于将多个Promise实例,包装成一个新的Promise实例
let p1 = new Promise((resolve, reject) => {
resolve('成功01');
})
let p2 = new Promise((resolve, reject) => {
resolve('成功02');
})
let p3 = new Promise((resolve, reject) => {
resolve('成功03');
// reject('失败03');
})
//参数可以不是数组,但是必须是iterator接口
let pAll = Promise.all([p1, p2, p3]);
console.log(pAll);
//pAll的状态,由p1,p2,p3来决定,只有当这三个都为成功,pAll才会成功
//但是有个一个失败,那么就是失败,这个时候第一个失败的实例的返回值,会传递给pAll的回调函数
//如果作为参数的实例,自己定义了catch方法,那么它一旦rejected,不会触发pAll的catch方法
pAll.then((value) => {
console.log(value);
}).catch((reason) => {
console.log(reason)
})
//多个请求结果合并在一起
function getBannerList() {
return new Promise((resolve, reject) => {
setTimeout(() => {
resolve('轮播图的数据');
}, 1000)
})
}
function getMusicList() {
return new Promise((resolve, reject) => {
setTimeout(() => {
resolve('歌曲列表的数据');
}, 2000)
})
}
function getCateList() {
return new Promise((resolve, reject) => {
setTimeout(() => {
resolve('歌单分类的数据');
}, 3000)
})
}
function initLoad() {
let All = Promise.all([getBannerList(), getMusicList(), getCateList()])
All.then((value) => {
console.log(value);
})
}
initLoad()