ES6

ECMAScript

语言与平台之间的关系是什么?

  • JavaScript(web) = ECMAScript + Web APIs(BOM + DOM)

  • JavaScript(node) = ECMAScript + Node APIs(fs + net + etc.)

ES2015

2015 年发布的 JS 第 6 个版本,也叫 ES6。

解决原有语法的不足。增强原有语法。

语法增强

  • let、const
  • 解构,数组解构和对象解构
  • 模板字符串,带标签的模板字符串
  • 字符串扩展方法
  • 函数参数默认值
  • 扩展运算符(...),收集剩余数据,展开数据
  • 箭头函数
  • 对象扩展方法
  • proxy 和 defineProperty
  • Reflect 对象
  • Promise
  • class
  • Set 和 Map 数据结构
  • Symbol,为对象添加独一无二的属性名
  • for...of 遍历任意数据结构,需要有 iterator;对象可先使用 entries 方法转成数组。
  • Iterable 接口,迭代器 Symbol.iterator
  • 迭代器接口,迭代器模式
  • Generator 函数与使用场景
  • ES Modules

异步编程

不要在forEach中使用异步。像并发,js 是单线程语言只有并发,短时间内执行很多任务。只有多线程或多进程的程序才有并行。

js 使用 EventLoop 机制,用宏任务和微任务实现并发。

for...in 和 for...of

  • for...in:es5 方法,使用在对象上,等同于Object.keys()
  • for...of:es6 方法使用在数组上

如果再循环中有复杂的逻辑,建议将逻辑封装成一个函数。

如果里面有异步操作,建议使用for...of,代替forEach,因为forEach不会等待异步执行。

Promise

Promise执行多个异步方法

使用这种方式,可以非常快捷方便的执行很多个异步方法

let runner = new Promise((resolve, reject) => {
  let chain = Promise.resolve()
  chain = chain.then(() => checkNodeVersion())
  chain = chain.then(() => initArgs())
  chain = chain.then(() => init())
  chain = chain.then(() => exec())
  chain.catch((error) => log.error(error.message))
})
1
2
3
4
5
6
7
8

Promise - catch 异常

每一层异步处理都需要有一层try catch

全局的try catch可以捕获全局调用栈中的异常,如果在异步里面嵌套Promise执行,需要在里面再做catch处理。

Last Updated: 2023/1/28 16:25:34
Contributors: 黎聪, licong96