ES6的语法笔记
参考
遍历 forEach
let Arr = [12, 'config', '19', 'WE', 16, -7]
Arr.forEach((value, index, arr) => {
value, index, arr
// 遍历的元素,下标,原数组
})
过滤 filter
// newArr:新数组,val:遍历的元素,返回true则加入到新数组
let newArr=Arr.filter((val) => {
return val < 17
})
console.log(newArr)
映射 map
// newAcc :新数组,val:遍历的元素,计算后返回到新数组
let Acc = [132, 321, 34, 366, 298]
let newAcc = Acc.map((val) => {
return val + 100
})
console.log(newAcc)
汇总reduce
// new2Arr:新数组,val:遍历的元素, perVal上一次的返回值,0:perVal的初始值
let new2Acc = Acc.reduce((perVal, val) => {
return perVal + val
}, 0)
console.log(new2Acc)
构造函数
class Uver{
constructor(name,age){
this.name = name
this.age = age
}
shoSy(){
console.log(this.name);
}
shoSt(){
console.log(this.age)
}
}
var u2 = new Uver('pengjj','28')
u2.shoSy();
u2.shoSt();
数组方法
// 返回一个布尔值,表示某个数组是否包含给定的值,第二个参数表示搜索的起始位置,负数则表示倒数的位置
[1, 2, 3].includes(4); // false
[1, 2, NaN].includes(NaN); // true
[1, 2, 3].includes(3, -1); // true
// 覆盖,将3号位复制到0号位
[1, 2, 3, 4, 5].copyWithin(0, 3, 4)
// [4, 2, 3, 4, 5]
// 将2号位到数组结束,复制到0号位
var i32a = new Int32Array([1, 2, 3, 4, 5]);
i32a.copyWithin(0, 2);
// Int32Array [3, 4, 5, 4, 5]
// 对象转数组
let arrayLike = {
'0': 'a',
'1': 'b',
'2': 'c',
length: 3
};
let arr2 = Array.from(arrayLike); // ['a', 'b', 'c']
字符串方法
// endswith 尾部验证 startswith 头部验证,includes是否拥有,第二个参数,表示开始搜索的位置,返回布尔值
let str = 'helloword'
let arr1 = str.endsWith('word')
let arr2 = str.startsWith('l')
let arr3 = str.includes('l',4)
console.log(arr2, arr1, arr3 )
// 字符串遍历
for (let codePoint of 'foo') {
console.log(codePoint)
}
// "f"
// "o"
// "o"
// 返回字符串给定位置的字符
'abc'.charAt(0) // "a"
// 头部和尾部补全,第一个参数用来指定字符串的最小长度,第二个参数是用来补全的字符串的值。
'xxx'.padStart(2, 'ab') // 'xxx'
'xxx'.padEnd(2, 'ab') // 'xxx'
'1'.padStart(10, '0') // "0000000001"
展开运算、函数运算
// 展开运算
let acc =[1,2,3]
console.log(...acc);
// 函数运算
let svr = s => s + 20
console.log(svr(3)) // 23
解构赋值
// 解构赋值
let [a, b, c] = [12, 22, 23];
console.log(a, b, c)
// 把对象里面的值单独拿出来
let qwer = { foo, bar } = { foo: 'aaa', bar: 'bbb' };
console.log(qwer ,foo, bar);
// 剩余
let [ac, ...bc] = [1, 2, 3];
console.log( ac);
console.log( bc);
Promise
1、主要解决回调地狱等一些复杂的异步操作,且链式编程所带来的状态和维护都会比嵌套更好
2、resolve, reject通过Promise的参数传入,其本身也是函数
3、resolve()成功回调到then(),reject()失败回调到catch(),也可以再then里面传两个函数,第一个为成功回调第二个为失败回调,不需要使用catch(), 也可以直接用throw ‘err’来抛出异常
4、将异步请求的代码和处理代码使用.then来分隔
// setTimeout函数作为Ajax请求,上一个回调执行完成所有的业务代码之后再执行下一个Ajax回调
PromiseClick () {
new Promise((resolve, reject) => {
// 第一次网络请求
setTimeout(() => {
resolve()
}, 2000)
}).then(() => {
// 第一次网络请求后处理代码
console.log('is work');
console.log('is work');
console.log('is work');
console.log('is work');
return new Promise((resolve, reject) => {
// 第二次网络请求
setTimeout(() => {
resolve()
}, 2000)
})
}).then(() => {
// 第二次网络请求后处理代码
console.log('is work2');
console.log('is work2');
console.log('is work2');
console.log('is work2');
return new Promise((resolve, reject) => {
// 第三次网络请求
setTimeout(() => {
reject('回调失败') // 回调失败时执行reject
}, 2000)
})
}).then(() => {
// 第三次网络请求后处理代码
console.log('is work3');
console.log('is work3');
console.log('is work3');
console.log('is work3');
}).catch((err) => { // 可以传参数到处理代码
// 也可以再.then里面传两个函数,第一个为成功回调第二个为失败回调,不需要使用catch().
console.log(err);
})
},
Promise里面的all方法,主要解决多个异步必须要全部完成才能往下执行的情况,results会作为一个数组在.then的参数里,依次拿到每个异步的数据
allPromiseClick () {
Promise.all([
new Promise((resolve, reject) => {
setTimeout(() => {
console.log('1')
resolve('1')
}, 2000)
}),
new Promise((resolve, reject) => {
setTimeout(() => {
console.log('2')
resolve('2')
}, 1000)
})
]).then((results) => {
console.log(results)
})
},
发表评论 (审核通过后显示评论):