You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
34 lines
1.1 KiB
34 lines
1.1 KiB
'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');
|
|
|