对象解构和处理异常

kyl*_*yle 7 javascript ecmascript-6

在javascript中,是否仍可以在处理异常的同时执行对象销毁?例如,这是我理想地希望能够执行的语法无效的内容

let body;
let err;

try {
  { body } = await networkRequest(...); // invalid syntax
} catch (e) {
  err = e;
}
Run Code Online (Sandbox Code Playgroud)

从我可以看出的选择是:

  1. 不要使用对象分解

  2. 不要处理异常

  3. 将被破坏的范围作用于try块

是否可以实现对象分解并处理异常?

dav*_*ave 10

您会收到一个解析错误,因为如果没有声明,对象分解的分配看起来像是左侧的一个块,而ES2015规范说必须将其解析为一个块。

您可以通过用括号括起来来解决此问题,以便引擎知道它是一个表达式:

let body;
let err;

try {
  ({ body } = { body: 'test' })
} catch (e) {
  err = e;
}
console.log(body);
Run Code Online (Sandbox Code Playgroud)

您可以在此处阅读有关此确切问题的信息

使用不带声明的对象文字解构赋值时,赋值语句周围的圆括号(...)是必需的语法。