babel-plugin-transform-es2015-for-of
Compile ES2015 for...of to ES5
Example
In
for var i of foo {}
Out
var _iteratorNormalCompletion = true;var _didIteratorError = false;var _iteratorError = undefined; try for var _iterator = fooSymboliterator _step; !_iteratorNormalCompletion = _step = _iteratornextdone; _iteratorNormalCompletion = true var i = _stepvalue; catch err _didIteratorError = true; _iteratorError = err; finally try if !_iteratorNormalCompletion && _iteratorreturn _iterator; finally if _didIteratorError throw _iteratorError;
Installation
npm install --save-dev babel-plugin-transform-es2015-for-of
Usage
.babelrc
(Recommended)
Via .babelrc
// without options "plugins": "transform-es2015-for-of" // with options "plugins": "transform-es2015-for-of" "loose": true
Via CLI
babel --plugins transform-es2015-for-of script.js
Via Node API
;
Options
loose
boolean
, defaults to false
In loose mode, arrays are put in a fast path, thus heavily increasing performance. All other iterables will continue to work fine.
Example
In
for var i of foo {}
Out
for var _iterator = foo _isArray = Array _i = 0 _iterator = _isArray ? _iterator : _iteratorSymboliterator;; var _ref; if _isArray if _i >= _iteratorlength break; _ref = _iterator_i++; else _i = _iteratornext; if _idone break; _ref = _ivalue; var i = _ref;
Abrupt completions
In loose mode an iterator's return
method will not be called on abrupt completions caused by thrown errors.
Please see google/traceur-compiler#1773 and babel/babel#838 for more information.
Optimization
If a basic array is used, Babel will compile the for-of loop down to a regular for loop.
In
for let a of 123 {}
Out
var _arr = 1 2 3;for var _i = 0; _i < _arrlength; _i++ var a = _arr_i;