Оператор typeof используется для определения типа переменной. Существует 6 возможных значений, которые возвращает typeof: "number," "string," "boolean," "object," "function," and "undefined".

В этом посте мы немного улучшим этот оператор, чтобы иметь возможность определять такие типы данных, как дата ("date") и массив ("array").
 

Существует много разнообразных форматов для даты, однако наиболее часто используемые из них такие:
mm/dd/yyyy, dd/mm/yyyy, m/d/yyyy и т.д..


Также для указания года могут использоваться не четыре, а две цифры. Например, так:
mm/dd/yy.

Кроме того, в качестве разделителя могут использоваться другие символы, например ".", "-" и т.д..

Нам нужно создать регулярное выражение и проверить передаваемое значение на соответствие этому выражению.

value.match(/\d{1,2}[\/.-]\d{1,2}[\/.-]\d{2,4}/)

Для того чтобы проверить, что передаваемое значение является массивом, достаточно попытаться использовать любой метод объекта Array для переданного значения, и проверить, не сгенерировалось ли исключение. Если не сгенерировалось - значит мы имеем дело с массивом. Мы использовали метод join.

А вот и результат: функция _typeof, более продвинутый вариант оператора typeof.

function _typeof(value)
{
  switch(typeof(value))
  { 
    case "string":
      return (value.match(/\d{1,2}[\/.-]\d{1,2}[\/.-]\d{2,4}/) != null) ? "date" : "string";
      break;
    case "object":
      try
      { value.join() }
      catch(e)
      {
        if(e.number == -2146827850)
          return "object"
        else
          throw e;
      }
      return "array";
      break;
    default:
      return typeof(value);
  } 
}

Для того, чтобы оставлять комментарии, вы должны войти под своим логином.