code: function ArrayIteratorNext() {
    var iterator = this;
    var value = UNDEFINED;
    var done = true;
  
    if (!IS_RECEIVER(iterator) ||
        !HAS_DEFINED_PRIVATE(iterator, arrayIteratorNextIndexSymbol)) {
      throw MakeTypeError(kIncompatibleMethodReceiver,
                          'Array Iterator.prototype.next', this);
    }
  
    var array = GET_PRIVATE(iterator, arrayIteratorObjectSymbol);
    if (!IS_UNDEFINED(array)) {
      var index = GET_PRIVATE(iterator, arrayIteratorNextIndexSymbol);
      var itemKind = GET_PRIVATE(iterator, arrayIterationKindSymbol);
      var length = TO_UINT32(array.length);
  
      // "sparse" is never used.
  
      if (index >= length) {
        SET_PRIVATE(iterator, arrayIteratorObjectSymbol, UNDEFINED);
      } else {
        SET_PRIVATE(iterator, arrayIteratorNextIndexSymbol, index + 1);
  
        if (itemKind == ITERATOR_KIND_VALUES) {
          value = array[index];
        } else if (itemKind == ITERATOR_KIND_ENTRIES) {
          value = [index, array[index]];
        } else {
          value = index;
        }
        done = false;
      }
    }
  
    return %_CreateIterResultObject(value, done);
  }
docs: ES6 section 22.1.5.2.1 %ArrayIteratorPrototype%.next( )