ES7新增语法
1.includes
2.指数运算:**
console.log(2**3 ) // Math.power(2,3)
ES8新增语法
1.Async/Await:更加语义化
(以前操作异步代码方式:1、嵌套回调 2.Promise 3.Generators)
async function add(num) { //该函数返回一个promise
return num + 2
}
add(2).then(res => {
console.log(res) // 3
}
await语法
function promiseFn() {
return new Promise((resolve, reject) => {
setTimeout(() => {
reject('error')
}, 1500)
});
}
async function fn() {
try {
await promiseFn().catch(err => { //捕获错误第2种方式,提前捕获
console.log(err) //err
});
console.log('我在错误后面不会执行')
} catch(err) { //捕获错误第1种方式
console.log(err) // error
}
}
fn()
使用Promise.all同步执行
function promiseFn() {
return new Promise((resolve, reject) => {
setTimeout(() => {
resolve('error')
}, 1000)
});
}
function promiseFn2() {
return new Promise((resolve, reject) => {
setTimeout(() => {
resolve('error')
}, 2000)
});
}
async function fn() {
console.time('fn1');
await promiseFn();
await promiseFn2();
console.timeEnd('fn1') //fn1: 3001.0068359375ms //串行执行
}
fn()
async function fn2() {
console.time('fn2');
await Promise.all([promiseFn(), promiseFn2()])
console.timeEnd('fn2') //fn2: 2000.72705078125ms //同步执行
}
fn2()
2.Object.values()
和Object.keys()类似
const obj = {name: 'aa', age:4}
console.log(Object.keys(obj).map(key => obj[key])) //["aa", 4]
console.log(Object.values(obj)) //["aa", 4]
3.Object.entries()
和for …in区别:for …in会枚举原型链中的属性
const obj = {name: 'aa', age:4}
console.log(Object.keys(obj).map(key => obj[key])) //["aa", 4]
console.log(Object.values(obj)) //["aa", 4]
console.log(Object.entries(obj)) // [["name", "aa"],["age", 4]]
console.log(Object.entries('abc')) // [["0", "a"], ["1", "b"], ["2", "c"]]
//遍历对象的键,值
for (const [key, value] of Object.entries(obj)) {
console.log(key, value) //name aa age 4
}
Object.entries(obj).forEach(([key, value]) => {
console.log(key,value) //name aa age 4
})