35 lines
1.1 KiB
JavaScript
35 lines
1.1 KiB
JavaScript
|
'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');
|