ES8语法基础整理笔记

Async Await(其实是promise的语法糖)

ES8中有没有比Promise更优雅的异步操作呢?

1
2
3
4
5
6
7
8
async function firstAsync ({
  return 27 //async 会自动把返回值变成promise实例
//等价于 return Promise.resolve (27)
}

firstAsync().then(val => {
  console.log(val)
})

await后跟promise对象,返回结果,如果不是,会自动转换
必须配合async使用

1
2
3
4
5
6
7
8
9
10
11
12
13
14
async function firstAsync ({
  let promise = new Promise((resolve, reject) => {
    setTimeout(function ({
      resolve('now it is done')
    }, 1000)
  })
  console.log(await promise) //异步操作的单线程设计,依次执行
  console.log(await Promise.resolve(40))
  console.log(2)
  return Promise.resolve(3)
}
firstAsync().then(val => {
  console.log(val)
})

上面代码的意思是async开启了一个promise对象,这个函数内部嵌套了一个promise操作,await在拿到这个操作结果之前都不会执行

Object keysvaluesentries(新增对Object快速遍历的方法,了解下)

之前写法

1
2
3
4
5
6
7
8
9
10
11
let grade = {
  'lilei'96,
  'hanmeimei'99
}
let result = []
for (let k in grade) {
  if (k === 'lilei') {
    result.push(k)
  }
}
console.log(result)

ES8写法–Object.keys()Object.values()

1
2
3
console.log(Object.keys(grade).filter(item => item === 'lilei'))
//filter过滤,Object.keys拿到数组,可用数组的方法
console.log(Object.values(grade).filter(item => item > 96))

for of写法,通过entries转换成可遍历对象
for offor in 尽量选择for of ,其实专门做遍历的

1
2
3
4
5
let result = []
for (let [k, v] of Object.entries(grade)) {
  console.log(k, v)
}
console.log(result)

String Padding (对String补白的方式)

之前写法

1
2
3
4
5
6
7
for (let i = 1; i < 32; i++) {
  if (i < 10) {
    console.log(`0${i}`)
  } else {
    console.log(i)
  }
}

ES8写法

1
2
3
4
for (let i = 1; i < 30020; i += 1000) {
  console.log(i.toString().padEnd(5'*#'))
//保证输出5位,不够补*# padStrat开头补 padEnd结尾补
}

ObjectgetOwnDescriptor(如何获取Object数据的描述符)

1
2
3
4
5
6
7
8
9
10
11
12
const data = {
  PortLand: '78/50',
  Dublin: '88/52',
  Lima: '58/40'
}
Object.defineProperty(data, 'Lima', {
  enumerable: false, //不能被枚举,描述符,不改变原始数据
  writable: false // 只读,不能赋值
})
console.log(Object.keys(data))
console.log(Object.getOwnPropertyDescriptors(data)) //查看描述符
console.log(Object.getOwnPropertyDescriptor(data, 'Lima'))//查看某一项的描述符
0%