docs: function extend() {
      let arg = arguments,
          target = arg[0] || {},
          deep = false,
          length = arg.length,
          i = 1,
          value, attr,
          copyIsArray;
  
      if (isBoolean(target)) {
          deep = target;
          target = arg[1] || {};
          i++;
      }
  
      for (; i < length; i++) {
          for (attr in arg[i]) {
  
              value = arg[i][attr];
  
              if (deep && (isPlainObject(value) || (copyIsArray = isArray(value)))) {
  
                  let src = target[attr];
  
                  if (copyIsArray) {
                      copyIsArray = false;
                      src = isArray(src) ? src : [];
                  } else {
                      src = isPlainObject(src) ? src : {};
                  }
  
                  target[attr] = extend(deep, src, value);
  
              } else {
                  target[attr] = value;
              }
          }
      }
  
      return target;
  }