10.9 解构陷阱
在使用解构的时候,要考虑两件事情:
- 一条语句不能以大括号开始。
- 在解构过程中,要么声明变量,要么赋值给它们,但是两件事不能一起做。
下面的两节讲述了详细内容。
10.9.1 一条语句不要以大括号开始
因为代码块以大括号开始,因此语句一定不要以大括号开始。这在对象解构赋值的时候会失败:
{ a, b } = someObject; // SyntaxError
变通的方法是把整个表达式放到小括号中:
({ a, b } = someObject); // ok
10.9.2 对于已经存在的变量,不能同时声明和赋值
在一个解构变量声明的过程中,左侧每一个变量都声明了。在下面的例子中,我们尝试声明变量 b
,并且使用已经存在的变量 f
,这种做法将会失败:
let f;
···
let { foo: f, bar: b } = someObject;
// During parsing (before running the code):
// SyntaxError: Duplicate declaration, f
修复的方法是事先声明好 b
,然后解构赋值:
let f;
···
let b;
({ foo: f, bar: b }) = someObject;