Оператор typeof повертає рядок, що вказує тип необчисленого операнду.


Оператор typeof супроводжується операндом:

typeof operand


Вираз, що представляє об'єкт або примітив, тип якого потрібно повернути.


Наступна таблиця наводить можливі значення, повернені typeof. Для отримання додаткової інформації про типи та прості значення, дивіться також статтю про Структури даних JavaScript.

Тип Результат
Undefined "undefined"
Null "object" (дивіться нижче)
Boolean "boolean"
Number "number"
BigInt "bigint"
String "string"
Symbol (new in ECMAScript 2015) "symbol"
Host object (provided by the JS environment) Залежить від реалізації
Function object (implements [[Call]] in ECMA-262 terms) "function"
Any other object "object"


// Числа
typeof 37 === 'number';
typeof 3.14 === 'number';
typeof(42) === 'number';
typeof Math.LN2 === 'number';
typeof Infinity === 'number';
typeof NaN === 'number'; // Незважаючи на те, що є "Not-A-Number" (не-числом)
typeof Number('1') === 'number'; // Number намагається розібрати значення як числа
typeof Number('чобіт') === 'number';   // також значення, які не можуть бути приведені до числових

typeof 42n === 'bigint';

// Рядки
typeof '' === 'string';
typeof 'бла' === 'string';
typeof `шаблонний літерал` === 'string';
typeof '1' === 'string'; // зауважте, що число у рядку все ж має тип string
typeof (typeof 1) === 'string'; // typeof завжди повертає string
typeof String(1) === 'string'; // String перетворює будь-що у рядок, безпечніше, ніж toString

// Булеві значення
typeof true === 'boolean';
typeof false === 'boolean';
typeof Boolean(1) === 'boolean'; // Boolean() перетворює значення на підставі того, чи є вони правдивими, чи хибними
typeof !!(1) === 'boolean'; // два виклики оператора ! (логічне НЕ) еквівалентні Boolean()

// Символи
typeof Symbol() === 'symbol'
typeof Symbol('ква') === 'symbol'
typeof Symbol.iterator === 'symbol'

// Undefined
typeof undefined === 'undefined';
typeof declaredButUndefinedVariable === 'undefined';
typeof undeclaredVariable === 'undefined'; 

// Об'єкти
typeof {a: 1} === 'object';

// Використовуйте Array.isArray або Object.prototype.toString.call,
// щоб відрізнити звичайні об'єкти від масивів
typeof [1, 2, 4] === 'object';

typeof new Date() === 'object';
typeof /regex/ === 'object'; // Дивіться історичні результати у розділі Регулярні вирази

// Наведені вирази є заплутаними, небезпечнимм та марнотратними. Уникайте їх.
typeof new Boolean(true) === 'object';
typeof new Number(1) === 'object';
typeof new String('abc') === 'object';

// Функції
typeof function() {} === 'function';
typeof class C {} === 'function';
typeof Math.sin === 'function';

Additional information


// This stands since the beginning of JavaScript
typeof null === 'object';

In the first implementation of JavaScript, JavaScript values were represented as a type tag and a value. The type tag for objects was 0. null was represented as the NULL pointer (0x00 in most platforms). Consequently, null had 0 as type tag, hence the "object" typeof return value. (reference)

A fix was proposed for ECMAScript (via an opt-in), but was rejected. It would have resulted in typeof null === 'null'.

Using new operator

// All constructor functions, with the exception of the Function constructor, will always be typeof 'object'
var str = new String('String');
var num = new Number(100);

typeof str; // It will return 'object'
typeof num; // It will return 'object'

var func = new Function();

typeof func; // It will return 'function'

Need for parentheses in Syntax

// Parentheses can be used for determining the data type of expressions.
var iData = 99;

typeof iData + ' Wisen'; // 'number Wisen'
typeof (iData + ' Wisen'); // 'string'

Regular expressions

Callable regular expressions were a non-standard addition in some browsers.

typeof /s/ === 'function'; // Chrome 1-12 Non-conform to ECMAScript 5.1
typeof /s/ === 'object';   // Firefox 5+  Conform to ECMAScript 5.1


Before ECMAScript 2015, typeof was always guaranteed to return a string for any operand it was supplied with. Even with undeclared identifiers, typeof will return 'undefined'. Using typeof could never generate an error.

But with the addition of block-scoped let and Statements/const using typeof on let and const variables (or using typeof on a class) in a block before they are declared will throw a ReferenceError. Block scoped variables are in a "temporal dead zone" from the start of the block until the initialization is processed, during which, it will throw an error if accessed.

typeof undeclaredVariable === 'undefined';

typeof newLetVariable; // ReferenceError
typeof newConstVariable; // ReferenceError
typeof newClass; // ReferenceError

let newLetVariable;
const newConstVariable = 'hello';
class newClass{};


All current browsers expose a non-standard host object document.all with type undefined.

typeof document.all === 'undefined';

Although the specification allows custom type tags for non-standard exotic objects, it requires those type tags to be different from the predefined ones. The case of document.all having type 'undefined' is classified in the web standards as a "willful violation" of the original ECMA JavaScript standard.


Specification Status Comment
ECMAScript Latest Draft (ECMA-262)
The definition of 'The typeof Operator' in that specification.
ECMAScript 2015 (6th Edition, ECMA-262)
The definition of 'The typeof Operator' in that specification.
ECMAScript 5.1 (ECMA-262)
The definition of 'The typeof Operator' in that specification.
ECMAScript 3rd Edition (ECMA-262)
The definition of 'The typeof Operator' in that specification.
ECMAScript 1st Edition (ECMA-262)
The definition of 'The typeof Operator' in that specification.
Standard Initial definition. Implemented in JavaScript 1.1.

Browser compatibility

Update compatibility data on GitHub
ChromeEdgeFirefoxInternet ExplorerOperaSafariAndroid webviewChrome for AndroidFirefox for AndroidOpera for AndroidSafari on iOSSamsung InternetNode.js
typeofChrome Full support 1Edge Full support 12Firefox Full support 1IE Full support 3Opera Full support YesSafari Full support YesWebView Android Full support 1Chrome Android Full support 18Firefox Android Full support 4Opera Android Full support YesSafari iOS Full support YesSamsung Internet Android Full support 1.0nodejs Full support Yes


Full support  
Full support

IE-specific notes

On IE 6, 7, and 8 a lot of host objects are objects and not functions. For example:

typeof alert === 'object'

See also