Movatterモバイル変換


[0]ホーム

URL:


  1. Веб-технологии для разработчиков
  2. JavaScript
  3. Справочник по JavaScript
  4. Выражения и операторы
  5. typeof

This page was translated from English by the community.Learn more and join the MDN Web Docs community.

View in EnglishAlways switch to English

typeof

Baseline Widely available

This feature is well established and works across many devices and browser versions. It’s been available across browsers since ⁨июль 2015 г.⁩.

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

Интерактивный пример

console.log(typeof 42);// Expected output: "number"console.log(typeof "blubber");// Expected output: "string"console.log(typeof true);// Expected output: "boolean"console.log(typeof undeclaredVariable);// Expected output: "undefined"

Синтаксис

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

typeof operand

Параметры

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

Описание

В следующей таблице приведены возможные возвращаемые значенияtypeof. Дополнительная информация о типах и примитивах находится на страницеструктуры данных JavaScript.

TypeResult
Undefined"undefined"
Null"object" (смотрите ниже)
Boolean"boolean"
Number"number"
String"string"
Symbol (новый тип из ECMAScript 2015)"symbol"
Host object (определено JS окружением)Зависит от реализации
Function object (реализует [[Call]] в терминах ECMA-262)"function"
Любой другой тип"object"

Примеры

js
// Числа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"; // никогда не используйте эту запись!// Строкиtypeof "" === "string";typeof "bla" === "string";typeof "1" === "string"; // обратите внимание, что число внутри строки всё равно имеет тип строкиtypeof typeof 1 === "string"; // typeof всегда вернёт в этом случае строкуtypeof String("abc") === "string"; // никогда не используйте эту запись!// Booleanstypeof true === "boolean";typeof false === "boolean";typeof Boolean(true) === "boolean"; // никогда не используйте эту запись!// Символыtypeof Symbol() === "symbol";typeof Symbol("foo") === "symbol";typeof Symbol.iterator === "symbol";// Undefinedtypeof 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 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";

null

js
// Это было определено с рождения JavaScripttypeof null === "object";

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

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

Использование оператораnew

js
// Все функции-конструкторы, созданные с помощью 'new', будут иметь тип 'object'var str = new String("String");var num = new Number(100);typeof str; // Вернёт 'object'typeof num; // Вернёт 'object'// Но существует исключение для конструктора Functionvar func = new Function();typeof func; // Вернёт 'function'

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

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

js
typeof /s/ === "function"; // Chrome 1-12 Не соответствует ECMAScript 5.1typeof /s/ === "object"; // Firefox 5+  Соответствует ECMAScript 5.1

Ошибки, связанные с временными мёртвыми зонами

До ECMAScript 2015, гарантировалось, что операторtypeof вернёт строку для любого операнда, с которым он был вызван. Это изменилось после добавления не поднимающихся объявленийlet andconst с блочной областью видимости. Теперь, если переменные объявлены с помощьюlet иconst, и для них вызываетсяtypeof в блоке объявления переменных, но до объявления, то выбрасываетсяReferenceError. Поведение отличается от необъявленных переменных, для которыхtypeof вернёт 'undefined'. Переменные с блочной областью видимости находятся в "временной мёртвой зоне", которая длится от начала блока до момента объявления переменных. В этой зоне попытка доступа к переменным выбрасывает исключение.

js
typeof undeclaredVariable === "undefined";typeof newLetVariable;let newLetVariable; // ReferenceErrortypeof newConstVariable;const newConstVariable = "hello"; // ReferenceError

Исключения

Во всех текущих браузерах существует нестандартный host-объектdocument.all, который имеет тип Undefined.

js
typeof document.all === "undefined";

Хотя спецификация разрешает собственные имена типов для нестандартных экзотических объектов, требуется чтобы эти имена отличались от предопределённых. Ситуация, когдаdocument.all имеет типundefined должна рассматриваться как исключительное нарушение правил.

Спецификации

Specification
ECMAScript® 2026 Language Specification
# sec-typeof-operator

Совместимость с браузерами

IE-специфичные замечания

В IE 6, 7 и 8 многие host-объекты являются объектами, но не функциями. Например:

js
typeof alert === "object";

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

Help improve MDN

Learn how to contribute

This page was last modified on byMDN contributors.


[8]ページ先頭

©2009-2025 Movatter.jp