Оператор typeof в JavaScript используется для проверки типов данных. Он выдает строковое имя, представляющее тип содержимого переменной, согласно таблице:
Тип | Результат |
---|---|
Undefined | "undefined" |
Null | "object" |
Boolean | "boolean" |
Number | "number" |
String | "string" |
Function | "function" |
Любой другой объект | "object" |
typeof в JavaScript используется для определения примитивных типов данных, таких как строка, число, булево значение, undefined и функция. Для проверки конкретных типов объектов (например, массивов или пользовательских классов) typeof не подходит, лучше использовать конструктор или instanceof
Т.е. для переменных типа object, array или пользовательского объекта, оператор typeof возвращает строку object, не позволяет понять, в чем состоит разница между всеми этими объектами. Пример:
// Проверка, не является ли наш массив на самом деле строкой if ( typeof arr == "string" ) // Если так оно и есть, создание массива,за счет разбиения строки // по элементам, разделенным запятыми arr = arr.split(",");
Однако typeof для объектов возвращает просто "object", не различая конкретные типы объектов (массив, дата, пользовательский объект и т.п.). Например, typeof [] и typeof {} оба вернут "object".
Альтернативный способ проверки типа объекта заключается в использовании ссылки на свойство, присущее всем объектам 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 |
Использование конструктора переменной в качестве ссылки на тип объекта — это наиболее надежный и безошибочный способ проверки типов.