UNPKG

2.41 kBMarkdownView Raw
1# babel-plugin-transform-es2015-for-of
2
3> Compile ES2015 for...of to ES5
4
5## Example
6
7**In**
8
9```js
10for (var i of foo) {}
11```
12
13**Out**
14
15```js
16var _iteratorNormalCompletion = true;
17var _didIteratorError = false;
18var _iteratorError = undefined;
19
20try {
21 for (var _iterator = foo[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {
22 var i = _step.value;
23 }
24} catch (err) {
25 _didIteratorError = true;
26 _iteratorError = err;
27} finally {
28 try {
29 if (!_iteratorNormalCompletion && _iterator.return) {
30 _iterator.return();
31 }
32 } finally {
33 if (_didIteratorError) {
34 throw _iteratorError;
35 }
36 }
37}
38```
39
40## Installation
41
42```sh
43npm install --save-dev babel-plugin-transform-es2015-for-of
44```
45
46## Usage
47
48### Via `.babelrc` (Recommended)
49
50**.babelrc**
51
52```js
53// without options
54{
55 "plugins": ["transform-es2015-for-of"]
56}
57
58// with options
59{
60 "plugins": [
61 ["transform-es2015-for-of", {
62 "loose": true
63 }]
64 ]
65}
66```
67
68### Via CLI
69
70```sh
71babel --plugins transform-es2015-for-of script.js
72```
73
74### Via Node API
75
76```javascript
77require("babel-core").transform("code", {
78 plugins: ["transform-es2015-for-of"]
79});
80```
81
82## Options
83
84### `loose`
85
86`boolean`, defaults to `false`
87
88In loose mode, arrays are put in a fast path, thus heavily increasing performance.
89All other iterables will continue to work fine.
90
91#### Example
92
93**In**
94
95```js
96for (var i of foo) {}
97```
98
99**Out**
100
101```js
102for (var _iterator = foo, _isArray = Array.isArray(_iterator), _i = 0, _iterator = _isArray ? _iterator : _iterator[Symbol.iterator]();;) {
103 var _ref;
104
105 if (_isArray) {
106 if (_i >= _iterator.length) break;
107 _ref = _iterator[_i++];
108 } else {
109 _i = _iterator.next();
110 if (_i.done) break;
111 _ref = _i.value;
112 }
113
114 var i = _ref;
115}
116```
117
118#### Abrupt completions
119
120In loose mode an iterator's `return` method will not be called on abrupt completions caused by thrown errors.
121
122Please see [google/traceur-compiler#1773](https://github.com/google/traceur-compiler/issues/1773) and
123[babel/babel#838](https://github.com/babel/babel/issues/838) for more information.
124
125### Optimization
126
127If a basic array is used, Babel will compile the for-of loop down to a regular for loop.
128
129**In**
130
131```js
132for (let a of [1,2,3]) {}
133```
134
135**Out**
136
137```js
138var _arr = [1, 2, 3];
139for (var _i = 0; _i < _arr.length; _i++) {
140 var a = _arr[_i];
141}
142```