code: function(a) {
      // Force compiler to respect argument length.
      var argLen = arguments.length, mapFn = arguments[1], context = arguments[2];
      var len, arr;
      if (isDefined(mapFn)) {
        assertCallable(mapFn);
      }
      a = getCoercedObject(a);
      len = trunc(max(0, a.length || 0));
      if (!isArrayIndex(len)) {
        throw new RangeError('Invalid array length');
      }
      if (isFunction(this)) {
        arr = new this(len);
        arr.length = len;
      } else {
        arr = new Array(len);
      }
      for (var i = 0; i < len; i++) {
        setProperty(arr, i, isDefined(mapFn) ? mapFn.call(context, a[i], i) : a[i], true);
      }
      return arr;
    }
docs: *
  @method from(a, [mapFn], [context])
  @returns Mixed
  @polyfill ES6
  @static
  @short Creates an array from an array-like object.
  @extra If [mapFn] is passed, it will be map each element of the array.
  [context] is the `this` object if passed.
  
  @callback mapFn
  
  el   The element of the current iteration.
  i    The index of the current iteration.
  arr  A reference to the array.
  
  @example
  
  Array.from({0:'a',1:'b',length:2}); -> ['a','b']
  
  *