一. Async/Await
避免回调地狱,比promise更优雅的书写的异步处理方式
fetch('https://blog.csdn.net/')
.then(response => {
console.log(response)
return fetch('https://juejin.cn')
})
.then(response => {
console.log(response)
})
.catch(error => {
console.log(error)
})
改造后
async function foo () {
try {
let response1 = await fetch('https://blog.csdn.net/')
console.log(response1)
let response2 = await fetch('https://juejin.cn')
console.log(response2)
} catch (err) {
console.error(err)
}
}
foo()
总结:
- 支持try/catch捕获异常,符合线性思维
- await不可以脱离async单独使用
- await后面一定是Promise对象,如果不是则自动包装
- async是一个通过异步执行并隐式返回Promise作为结果的函数。
二. Object.values(), Object.entries()
ES5 引入了Object.keys方法,返回一个数组,成员是参数对象自身的(不含继承的)所有可遍历(enumerable)属性的键名,同理es8引入了Object.values(),Object.entries()
- Object.values()
const obj = { foo: 'bar', baz: 42 };
Object.values(obj) // ["bar", 42]
const obj = { 100: 'a', 2: 'b', 7: 'c' };
Object.values(obj) // ["b", "c", "a"]
// 如果属性名为数值的属性,是按照数值大小,从小到大遍历的
- Object.entries()
const obj = { foo: 'bar', baz: 42 };
Object.entries(obj) // [ ["foo", "bar"], ["baz", 42] ]
const obj = { 10: 'xxx', 1: 'yyy', 3: 'zzz' };
Object.entries(obj); // [['1', 'yyy'], ['3', 'zzz'], ['10': 'xxx']]
三、 string padding
'x'.padStart(4, 'ab') // 'abax'
'x'.padEnd(5, 'ab') // 'xabab'
四、Object.getOwnPropertyDescriptors()
ES5的Object.getOwnPropertyDescriptor()方法会返回某个对象属性的描述对象(descriptor)。ES8 引入了Object.getOwnPropertyDescriptors()方法,返回指定对象所有自身属性(非继承属性)的描述对象
该方法的引入目的,主要是为了解决Object.assign()无法正确拷贝get属性和set属性的问题
Object.getOwnPropertyDescriptors()方法配合Object.defineProperties()方法,就可以实现正确拷贝。
const source = {
set foo (value) {
console.log(value)
},
get bar () {
return '浪里行舟'
}
}
const target2 = {}
Object.defineProperties(target2, Object.getOwnPropertyDescriptors(source))
console.log(Object.getOwnPropertyDescriptor(target2, 'foo'))