Краткое описание
Оператор typeof возвращает строку, указывающую тип операнда, не производя конечных вычислений
Синтаксис
Операнд следует за оператором typeof:
typeof операнд
Параметры
операнд является выражением, представляющим объект или primitive, тип которого должен быть возвращен.
Описание
В следующей таблице приведены возможные возвращаемые значения typeof. Для получения дополнительной информации о типах и примитивов, смотрите также страницу структуры данных JavaScript.
Type | Result |
---|---|
Undefined | "undefined" |
Null | "object" (см. ниже) |
Boolean | "boolean" |
Number | "number" |
String | "string" |
Symbol (новый тип из ECMAScript 6) | "symbol" |
Host object (определено JS средой) | Зависит от имплементации |
Function object (имплементирует [[Call]] в ECMA-262 условиях) | "function" |
Любой другой тип | "object" |
Примеры
Обычные случаи применения
// Числа typeof 37 === 'number'; typeof 3.14 === 'number'; typeof Math.LN2 === 'number'; typeof Infinity === 'number'; typeof NaN === 'number'; // Несмотря на то, что это "Not-A-Number" (не число) typeof Number(1) === 'number'; // Никогда не используйте эту запись! // Строки typeof "" === 'string'; typeof "bla" === 'string'; typeof (typeof 1) === 'string'; // typeof всегда вернет в этом случае строку typeof String("abc") === 'string'; // Никогда не используйте эту запись! // Booleans typeof true === 'boolean'; typeof false === 'boolean'; typeof Boolean(true) === 'boolean'; // Никогда не используйте эту запись! // Символы typeof Symbol() === 'symbol' typeof Symbol('foo') === 'symbol' typeof Symbol.iterator === 'symbol' // Не определено typeof undefined === 'undefined'; typeof blabla === 'undefined'; // Неопределенная переменная // Объекты typeof {a:1} === 'object'; // Используйте Array.isArray или Object.prototype.toString.call // чтобы дифференцировать регулярные объекты массивов typeof [1, 2, 4] === 'object'; typeof new Date() === 'object'; // То что ниже приводит к ошибкам и проблемам. Не использовать! typeof new Boolean(true) === 'object'; typeof new Number(1) === 'object'; typeof new String("abc") === 'object'; // Функции typeof function(){} === 'function'; typeof Math.sin === 'function';
null
// Это было определено с рождения JavaScript typeof null === 'object';
В первой реализации JavaScript значения были представлены как тип тега и значения. Тип тега для объектов был 0. null был представлен как указатель null (0x00 в большинстве платформ). Следовательно, null был нулем как тип тег, поэтому typeof возвращаемое значение - поддельно. (подробнее)
Исправление было предложено в ECMAScript (через отключение), но было отклонено. Это привело бы к тому, что typeof null === 'null'
.
Регулярные выражения
Вызываемые регулярные выражения были нестандартным дополнением в некоторых браузерах.
typeof /s/ === 'function'; // Chrome 1-12 Не соответствует ECMAScript 5.1 typeof /s/ === 'object'; // Firefox 5+ Соответствует ECMAScript 5.1
Спецификация
Спецификация | Статус | Комментарий |
---|---|---|
ECMAScript 1st Edition. | Standard | Начальное определение. Имплементировано в JavaScript 1.1 |
ECMAScript 5.1 (ECMA-262) Определение 'The typeof Operator' в этой спецификации. |
Стандарт | |
ECMAScript 2015 (6th Edition, ECMA-262) Определение 'The typeof Operator' в этой спецификации. |
Стандарт |
Совместимость с браузерами
Feature | Chrome | Firefox (Gecko) | Internet Explorer | Opera | Safari |
---|---|---|---|---|---|
Basic support | (Да) | (Да) | (Да) | (Да) | (Да) |
Feature | Android | Chrome for Android | Firefox Mobile (Gecko) | IE Mobile | Opera Mobile | Safari Mobile |
---|---|---|---|---|---|---|
Basic support | (Да) | (Да) | (Да) | (Да) | (Да) | (Да) |
Хост-объекты IE являются объектами, а не функциями
В IE 6, 7, и 8 большинство хост-объектов это объекты, а не функции. Например:
typeof alert === 'object'