| 'use strict'; | 
| var toIndexedObject = require('../internals/to-indexed-object'); | 
| var addToUnscopables = require('../internals/add-to-unscopables'); | 
| var Iterators = require('../internals/iterators'); | 
| var InternalStateModule = require('../internals/internal-state'); | 
| var defineProperty = require('../internals/object-define-property').f; | 
| var defineIterator = require('../internals/iterator-define'); | 
| var createIterResultObject = require('../internals/create-iter-result-object'); | 
| var IS_PURE = require('../internals/is-pure'); | 
| var DESCRIPTORS = require('../internals/descriptors'); | 
|   | 
| var ARRAY_ITERATOR = 'Array Iterator'; | 
| var setInternalState = InternalStateModule.set; | 
| var getInternalState = InternalStateModule.getterFor(ARRAY_ITERATOR); | 
|   | 
| // `Array.prototype.entries` method | 
| // https://tc39.es/ecma262/#sec-array.prototype.entries | 
| // `Array.prototype.keys` method | 
| // https://tc39.es/ecma262/#sec-array.prototype.keys | 
| // `Array.prototype.values` method | 
| // https://tc39.es/ecma262/#sec-array.prototype.values | 
| // `Array.prototype[@@iterator]` method | 
| // https://tc39.es/ecma262/#sec-array.prototype-@@iterator | 
| // `CreateArrayIterator` internal method | 
| // https://tc39.es/ecma262/#sec-createarrayiterator | 
| module.exports = defineIterator(Array, 'Array', function (iterated, kind) { | 
|   setInternalState(this, { | 
|     type: ARRAY_ITERATOR, | 
|     target: toIndexedObject(iterated), // target | 
|     index: 0,                          // next index | 
|     kind: kind                         // kind | 
|   }); | 
| // `%ArrayIteratorPrototype%.next` method | 
| // https://tc39.es/ecma262/#sec-%arrayiteratorprototype%.next | 
| }, function () { | 
|   var state = getInternalState(this); | 
|   var target = state.target; | 
|   var index = state.index++; | 
|   if (!target || index >= target.length) { | 
|     state.target = null; | 
|     return createIterResultObject(undefined, true); | 
|   } | 
|   switch (state.kind) { | 
|     case 'keys': return createIterResultObject(index, false); | 
|     case 'values': return createIterResultObject(target[index], false); | 
|   } return createIterResultObject([index, target[index]], false); | 
| }, 'values'); | 
|   | 
| // argumentsList[@@iterator] is %ArrayProto_values% | 
| // https://tc39.es/ecma262/#sec-createunmappedargumentsobject | 
| // https://tc39.es/ecma262/#sec-createmappedargumentsobject | 
| var values = Iterators.Arguments = Iterators.Array; | 
|   | 
| // https://tc39.es/ecma262/#sec-array.prototype-@@unscopables | 
| addToUnscopables('keys'); | 
| addToUnscopables('values'); | 
| addToUnscopables('entries'); | 
|   | 
| // V8 ~ Chrome 45- bug | 
| if (!IS_PURE && DESCRIPTORS && values.name !== 'values') try { | 
|   defineProperty(values, 'name', { value: 'values' }); | 
| } catch (error) { /* empty */ } |