Книга: JavaScript. Подробное руководство, 6-е издание
4.13.2. Оператор typeof
4.13.2. Оператор typeof
Унарный оператор typeof
помещается перед единственным операндом, который может иметь любой тип. Его значением является строка, указывающая на тип данных операнда. Следующая таблица определяет значения оператора typeof
для всех значений, возможных в языке JavaScript:
Оператор typeof может применяться, например, в таких выражениях:
(typeof value == "string") ? ..... + value + ..... : value
Оператор typeof
можно также использовать в инструкции switch (раздел 5.4.3). Обратите внимание, что операнд оператора typeof
можно заключить в скобки, что делает оператор typeof
более похожим на имя функции, а не на ключевое слово или оператор:
typeof(і)
Обратите внимание, что для значения null оператор typeof
возвращает строку «object». Если вам потребуется отличать null
от других объектов, добавьте проверку для этого спецслучая. Для объектов, определяемых средой выполнения, оператор typeof
может возвращать строку, отличную от «object». Однако на практике большинство таких объектов в клиентском JavaScript имеют тип «object».
Для всех объектных типов и типов массивов результатом оператора typeof
является строка «object», поэтому он может быть полезен только для определения принадлежности значения к объектному или к простому типу. Чтобы отличить один класс объектов от другого, следует использовать другие инструменты, такие как оператор instanceof
(раздел 4.9.4), атрибут class
(раздел 6.8.2) или свойство constructor
(разделы 6.8.1 и 9.2.2).
Несмотря на то что функции в JavaScript также являются разновидностью объектов, оператор typeof
отличает функции, потому что они имеют собственные возвращаемые значения. В JavaScript имеется тонкое отличие между функциями и «вызываемыми объектами». Функции могут вызываться, но точно так же можно создать вызываемый объект - который может вызываться подобно функции, -не являющийся настоящей функцией. В спецификации ECMAScript 3 говорится, что оператор typeof
должен возвращать строку «function» для всех объектов базового языка, которые могут вызываться. Спецификация ECMAScript 5 расширяет это требование и требует, чтобы оператор typeof
возвращал строку «function» для всех вызываемых объектов, будь то объекты базового языка или среды выполнения. Большинство производителей броузеров для реализации методов своих объектов среды выполнения используют обычные объекты-функции базового языка JavaScript. Однако корпорация Microsoft для реализации своих клиентских методов всегда использовала собственные вызываемые объекты, вследствие чего в версиях до IE9 оператор typeof
возвращает строку «object» для них, хотя они ведут себя как функции. В версии ІЕ9 клиентские методы были реализованы как обычные объекты-функции базового языка. Подробнее об отличиях между истинными функциями и вызываемыми объектами рассказывается в разделе 8.7.7.
- Оператор получения типа typeof
- Однострочные операторы If...Then
- Операторы сравнения
- Операторы
- Операторы
- 4.7.5. Приоритет операторов
- 4.13. Прочие операторы
- 9.5.1. Оператор instanceof
- Операторы равенства aрифметические, условные, побитовые, битового дополнения и сдвига
- Арифметические операторы
- 1.2.4. Операторы и приоритеты
- Условные операторы