JavaScript оператор typeof

Материал из Энциклопедия о программировании
Перейти к: навигация, поиск

typeof — оператор ЯП ECMAScript (и, в частности, его диалекта JS), что возвращает строку, указывающую тип операнда, не производя конечных вычислений.

Синтаксис

Оператор typeof следует за своим операндом:

typeof операнд

Параметры

Операнд является выражением, представляющим объект или primitive, тип которого должен быть возвращен.

Возвращаемые значения

JavaScript оператор typeof возвращает строку, содержащую название типа.

Табл. возможных возвращаемых значений оператора typeof
ТипРезультат
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:

Числа
typeof 37 === 'number';
typeof 3.14 === 'number';
typeof Math.LN2 === 'number';
typeof Infinity === 'number';

Возвращает number, несмотря на то, что NaN это "Not-A-Number" (не число):

typeof NaN === 'number';

Не использ. след. запись:

typeof Number(1) === 'number';
Строки
typeof "" === 'string';
typeof "foo" === 'string';

typeof всегда вернет в этом случае строку:

typeof (typeof 1) === 'string';

Не использ. след. запись:

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 x === '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

След. было определено с рождения JS:

typeof null === 'object';

В 1-ой реализации JS значения были представлены как тип тега и значения. Тип тега для объектов был 0. null был представлен как указатель null (0x00 в большинстве платформ). Следовательно, null был нулем как тип тег, поэтому typeof возвращаемое значение — поддельно.

Исправление было предложено в ECMAScript (через отключение), но было отклонено. Это привело бы к тому, что typeof null === 'null'.

Регулярные выражения

Вызываемые регулярные выражения были нестандартным дополнением в некоторых браузерах.

Поддержка

Оператор typeof входит в спецификацию ЯП ECMAScript, поэтому поддерживается всеми интерпретаторами, в числе которых:

  • Carakan: (Opera до версии 15)
  • Chakra (Internet Explorer)
  • SpiderMonkey (Mozilla Gecko, Firefox)
  • SquirrelFish/Nitro (Apple Inc.'s WebKit)
  • Tamarin (Adobe Flash)
  • V8 (Google Chrome, Node.js, V8.NET)
  • JavaScriptCore
  • Nashorn (Oracle Java Development Kit — JDK)

См. также

По теме «JavaScript/keywords/typeof» см. также сдед.:

Данный материал относится к ЯП JS.