docs: function(callback, initialValue){
        var len = this.length;
        var argsLen = arguments.length;
  
        // no value to return if no initial value and an empty array
        if (len == 0 && argsLen == 1)
          throw new TypeError();
  
        var result;
        var inited = 0;
  
        if (argsLen > 1)
        {
          result = initialValue;
          inited = 1;
        }
  
        for (var i = 0; i < len; i++)
          if (i in this)
            if (inited++)
              result = callback.call(null, result, this[i], i, this);
            else
              result = this[i];
  
        return result;
      }