1. Promise
我们首先定义一个promise
方法
1 | function setName(newName) { |
第一次调用,给到参数为“Tom”,promise
异常对调,进入reject
回调中,在catch
中接收回调。
1 | setName('Tom').then(res => { |
第二次调用,给到参数为“jack”,promise
正常对调,进入resolve
回调中,在then
中接收回调。
1 | setName('jack').then(res => { |
2. async/await
async函数是使用
async
关键字声明的函数。 async函数是AsyncFunction
构造函数的实例, 并且其中允许使用await
关键字。async
和await
关键字让我们可以用一种更简洁的方式写出基于Promise
的异步行为,而无需刻意地链式调用promise
。
任意一个名称都是有意义的,先从字面意思来理解。async
是“异步”的简写,而 await
可以认为是 async wait
的简写。所以应该很好理解 async
用于申明一个 function 是异步的,而 await
用于等待一个异步方法执行完成。
await
只能出现在 async
函数中
我们还是以上面的例子做一个演示:
还是定义一个promise
方法
1 | function setName(newName) { |
我们再定义一个带有async
的方法,在该方法中调用setName('jack')
,结果按照我们预料到的一样运行。
1 | async function getName() { |
第二次调用,我们将setName('tom')
的参数换成'tom'
。
1 | async function getName() { |
我们发现,控制台报错了。原因是在第二次调用时,我们给的参数是'tom'
, 这让 promise
函数进入了reject
回调中。
但问题是,我们已经在reject回调中做了异常的处理,为什么还会在控制台上报错呢。
其实我们需要在async
函数中使用try-catch
来捕获异常,如下:
1 | async function getName() { |
我们在try
中执行正常回调的代码,如果有异常发生,则在catch
中捕获异常,做异常处理。
3. 展开操作符
展开操作符可用于对象或数组,示例:
对象:
1 | var tom = { |
如果两个对象中有重复的key值,结果是如何呢?
1 | var tom = { |
1 | var tom = { |
从上面的例子中可以看到,后面的key值会覆盖前面的key值。
数组:
1 | var arr = [1,2,3,4,5] |
4. 剩余参数
1 | function sum(a, b, ...c) { |
如上所示,参数c
是由剩余参数组成的一个数组。
5. 字符串插值
常用在拼接字符串时。使用${}
将数据包裹,使用`来包裹整个字符串。
1 | const name = 'jack' |
6. 简写属性
这是原本的写法
1 | const name = 'jack' |
简写:
1 | const name = 'jack' |
7. 解构赋值
对象
1 | var userInfo = { |
在需要获取嵌套的对象数据时,可以这样获取:let { school: { schoolName, grade } } = userInfo
数组
1 | const arr = [1, 2, 3, 4, 5] |
如果我们想间隔取值,可以使用, ,
来获取。也可以使用上面说到的【剩余参数】来获取剩余的数组。
注意:此处的剩余参数需写到最后。
结语:
以上几个特性,是我在开发过程中时常会用到的,每个新特性在使用中都会给予我巨大的快乐。不论是写法得简便,还是逻辑得清晰。都让我的开发效率得到了巨大的提升。所以,用起来吧!✊✊✊