Skip to content

Commit 2fc2441

Browse files
committed
edit destructuring
1 parent 4e1e738 commit 2fc2441

File tree

2 files changed

+31
-2
lines changed

2 files changed

+31
-2
lines changed

docs/destructuring.md

Lines changed: 30 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -171,7 +171,15 @@ l // 'world'
171171
var { foo: foo, bar: bar } = { foo: "aaa", bar: "bbb" };
172172
```
173173

174-
也就是说,对象的解构赋值的内部机制,是先找到同名属性,然后再赋给对应的变量。
174+
也就是说,对象的解构赋值的内部机制,是先找到同名属性,然后再赋给对应的变量。真正被赋值的是后者,而不是前者。
175+
176+
```javascript
177+
var { foo: baz } = { foo: "aaa", bar: "bbb" };
178+
baz // "aaa"
179+
foo // error: foo is not defined
180+
```
181+
182+
上面代码中,真正被赋值的是变量`baz`,而不是模式`foo`
175183

176184
和数组一样,解构也可以用于嵌套结构的对象。
177185

@@ -188,6 +196,26 @@ x // "Hello"
188196
y // "World"
189197
```
190198

199+
注意,这时`p`是模式,不是变量,因此不会被赋值。
200+
201+
```javascript
202+
var node = {
203+
loc: {
204+
start: {
205+
line: 1,
206+
column: 5
207+
}
208+
}
209+
};
210+
211+
var { loc: { start: { line }} } = node;
212+
line // 1
213+
loc // error: loc is undefined
214+
start // error: start is undefined
215+
```
216+
217+
上面代码中,只有`line`是变量,`loc``start`都是模式,不会被赋值。
218+
191219
对象的解构也可以指定默认值。
192220

193221
```javascript
@@ -201,7 +229,7 @@ var { message: msg = "Something went wrong" } = {};
201229
console.log(msg); // "Something went wrong"
202230
```
203231

204-
默认值生效的条件是,对象的属性值严格等于undefined
232+
默认值生效的条件是,对象的属性值严格等于`undefined`
205233

206234
```javascript
207235
var {x = 3} = {x: undefined};

docs/reference.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,7 @@
3636
## 解构赋值
3737

3838
- Nick Fitzgerald, [Destructuring Assignment in ECMAScript 6](http://fitzgeraldnick.com/weblog/50/): 详细介绍解构赋值的用法
39+
- Nicholas C. Zakas, [ECMAScript 6 destructuring gotcha](https://www.nczonline.net/blog/2015/10/ecmascript-6-destructuring-gotcha/)
3940

4041
## 字符串
4142

0 commit comments

Comments
 (0)