Оператор typeof в JavaScript используется для проверки типов данных. Он выдает строковое имя, представляющее тип содержимого переменной, согласно таблице:
Тип | Результат |
---|---|
Undefined | "undefined" |
Null | "object" |
Boolean | "boolean" |
Number | "number" |
String | "string" |
Function | "function" |
Любой другой объект | "object" |
Т.е. для переменных типа object, array или пользовательского объекта, оператор typeof возвращает строку object, не позволяет понять, в чем состоит разница между всеми этими объектами. Пример.
// Проверка, не является ли наш массив на самом деле строкой if ( typeof arr == "string" ) // Если так оно и есть, создание массива,за счет разбиения строки // по элементам, разделенным запятыми arr = arr.split(",");
Альтернативный способ проверки типа объекта заключается в использовании ссылки на свойство, присущее всем объектам JavaScript, которое называется constructor. Это свойство является ссылкой на функцию, используемую для первоначального создания этого объекта.
// Проверка, не является ли наша строка на самом деле массивом if ( str.constructor == Array ) // Если так оно и есть, создание строки за счет объединения элементов // массива через запятые str = str.join(',');
В таблице показаны результаты проверки типа различных объектов с использованием обоих методов. В первом столбце таблицы показан объект, тип которого нужно определить. Второй столбец показывает результат работы оператора typeof, все результаты, представленные в этом столбце являются строками. В третьем столбце показан результат работы constructor, все результаты, представленные в этом столбце, являются объектами.
Переменная | typeof | Конструктор переменной |
---|---|---|
{ an: “object” } | object | Object |
[ “an”, “array” ] | object | Array |
function(){} | function | Function |
“a string“ | string | String |
777 | number | Number |
true | boolean | Boolean |
new UserObj() | object | UserObj |