Mozilla's getting a new look. What do you think? https://mzl.la/brandsurvey

typeof

Краткое описание

Оператор 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'

Смотрите также

Метки документа и участники

 Внесли вклад в эту страницу: Sergey.Vdovareize, Ohar, SphinxKnight, teoli, kvantor
 Обновлялась последний раз: Sergey.Vdovareize,