TestComplete: улучшаем оператор typeof языка JScript
@ Пн, 4 августа, 13:25Оператор 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);
}
}
