File tree Expand file tree Collapse file tree 2 files changed +31
-2
lines changed Expand file tree Collapse file tree 2 files changed +31
-2
lines changed Original file line number Diff line number Diff line change @@ -171,7 +171,15 @@ l // 'world'
171
171
var { foo: foo, bar: bar } = { foo: " aaa" , bar: " bbb" };
172
172
```
173
173
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 ` 。
175
183
176
184
和数组一样,解构也可以用于嵌套结构的对象。
177
185
@@ -188,6 +196,26 @@ x // "Hello"
188
196
y // "World"
189
197
```
190
198
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
+
191
219
对象的解构也可以指定默认值。
192
220
193
221
``` javascript
@@ -201,7 +229,7 @@ var { message: msg = "Something went wrong" } = {};
201
229
console .log (msg); // "Something went wrong"
202
230
```
203
231
204
- 默认值生效的条件是,对象的属性值严格等于undefined 。
232
+ 默认值生效的条件是,对象的属性值严格等于 ` undefined ` 。
205
233
206
234
``` javascript
207
235
var {x = 3 } = {x: undefined };
Original file line number Diff line number Diff line change 36
36
## 解构赋值
37
37
38
38
- 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/ )
39
40
40
41
## 字符串
41
42
You can’t perform that action at this time.
0 commit comments