| 'use strict'; |
| var addToUnscopables = require('./_add-to-unscopables'); |
| var step = require('./_iter-step'); |
| var Iterators = require('./_iterators'); |
| var toIObject = require('./_to-iobject'); |
| |
| // 22.1.3.4 Array.prototype.entries() |
| // 22.1.3.13 Array.prototype.keys() |
| // 22.1.3.29 Array.prototype.values() |
| // 22.1.3.30 Array.prototype[@@iterator]() |
| module.exports = require('./_iter-define')(Array, 'Array', function (iterated, kind) { |
| this._t = toIObject(iterated); // target |
| this._i = 0; // next index |
| this._k = kind; // kind |
| // 22.1.5.2.1 %ArrayIteratorPrototype%.next() |
| }, function () { |
| var O = this._t; |
| var kind = this._k; |
| var index = this._i++; |
| if (!O || index >= O.length) { |
| this._t = undefined; |
| return step(1); |
| } |
| if (kind == 'keys') return step(0, index); |
| if (kind == 'values') return step(0, O[index]); |
| return step(0, [index, O[index]]); |
| }, 'values'); |
| |
| // argumentsList[@@iterator] is %ArrayProto_values% (9.4.4.6, 9.4.4.7) |
| Iterators.Arguments = Iterators.Array; |
| |
| addToUnscopables('keys'); |
| addToUnscopables('values'); |
| addToUnscopables('entries'); |