Skip to content

Commit 6b1ee30

Browse files
committed
edit destructuring and iterator
1 parent 5a5f9d8 commit 6b1ee30

4 files changed

Lines changed: 95 additions & 77 deletions

File tree

docs/destructuring.md

Lines changed: 27 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -44,13 +44,10 @@ tail // [2, 3, 4]
4444

4545
```javascript
4646
var [foo] = [];
47-
var [foo] = 1;
48-
var [foo] = false;
49-
var [foo] = NaN;
5047
var [bar, foo] = [1];
5148
```
5249

53-
以上几种情况都属于解构不成功,foo的值都会等于undefined。这是因为原始类型的值,会自动转为对象,比如数值1转为`new Number(1)`,从而导致foo取到undefined
50+
以上两种情况都属于解构不成功,foo的值都会等于undefined。
5451

5552
另一种情况是不完全解构,即等号左边的模式,只匹配一部分的等号右边的数组。这种情况下,解构依然可以成功。
5653

@@ -65,18 +62,19 @@ b // 2
6562
d // 4
6663
```
6764

68-
上面代码的两个例子,都属于不完全解构,但是可以成功。
65+
上面两个例子,都属于不完全解构,但是可以成功。
6966

70-
如果对undefined或null进行解构,会报错
67+
如果等号的右边不是数组(或者严格地说,不是可遍历的结构,参见《Iterator》一章),那么将会报错
7168

7269
```javascript
7370
// 报错
71+
let [foo] = 1;
72+
let [foo] = false;
73+
let [foo] = NaN;
7474
let [foo] = undefined;
7575
let [foo] = null;
7676
```
7777

78-
这是因为解构只能用于数组或对象。其他原始类型的值都可以转为相应的对象,但是,undefined和null不能转为对象,因此报错。
79-
8078
解构赋值允许指定默认值。
8179

8280
```javascript
@@ -207,6 +205,27 @@ x // null
207205

208206
上面代码中,如果x属性等于null,就不严格相等于undefined,导致默认值不会生效。
209207

208+
如果解构失败,变量的值等于undefined。
209+
210+
```javascript
211+
var {foo} = {bar: 'baz'}
212+
foo // undefined
213+
```
214+
215+
如果解构模式是嵌套的对象,而且子对象所在的父属性不存在,那么将会报错。
216+
217+
```javascript
218+
// 报错
219+
var {foo: {bar}} = {baz: 'baz'}
220+
```
221+
222+
上面代码中,等号左边对象的foo属性,对应一个子对象。该子对象的bar属性,解构时会报错。原因很简单,因为foo这时等于undefined,再取子属性就会报错,请看下面的代码。
223+
224+
```javascript
225+
var _tmp = {baz: 'baz'};
226+
_tmp.foo.bar // 报错
227+
```
228+
210229
如果要将一个已经声明的变量用于解构赋值,必须非常小心。
211230

212231
```javascript

docs/intro.md

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -116,6 +116,11 @@ $ node --v8-options | grep harmony
116116
```bash
117117
$ npm install -g es-checker
118118
$ es-checker
119+
120+
=========================================
121+
Passes 24 feature Dectations
122+
Your runtime supports 57% of ECMAScript 6
123+
=========================================
119124
```
120125

121126
## Babel转码器
@@ -207,6 +212,19 @@ Babel配合Browserify一起使用,可以生成浏览器能够直接加载的
207212
$ browserify script.js -t babelify --outfile bundle.js
208213
```
209214

215+
`package.json`设置下面的代码,就不用每次命令行都输入参数了。
216+
217+
```javascript
218+
{
219+
// ...
220+
"browserify": {
221+
"transform": [
222+
["babelify", { "stage": [0] }]
223+
]
224+
}
225+
}
226+
``
227+
210228
## Traceur转码器
211229

212230
Google公司的[Traceur](https://github.com/google/traceur-compiler)转码器,也可以将ES6代码转为ES5代码。

0 commit comments

Comments
 (0)