docs: function iterator(obj, sort, kv) {
    switch (true) {
      case isFunction(obj[p.iterator]):
        return obj[p.iterator]();
      case isFunction(obj.next):
        return obj;
      case isFunction(obj):
        return functionIterator(obj);
      case isString(obj):
        return stringIterator(obj);
      case isArray(obj):
        return arrayIterator(obj);
      case isObject(obj):
        return objectIterator(obj, sort, kv);
      default:
        return null;
    }
  }