Сравнение JavaScript операторов typeof и insanceof
В JavaScript есть операторы typeof и instanceof, на первый взгляд они похоже, но они выполняют разные функции.
В этой статье будет рассмотрена разница между ними и показаны примеры использования.
Typeof оператор
Оператор typeof используется, в основном, для того, чтобы узнать тип примитивного значения.
Если у нас есть числа, больше числа, строки, символы, логические или неопределенные значения мы можем узнать их с помощью оператора.
К примеру, у нас есть :
В терминале отобразится ‘number’.
Более полезно, когда у нас есть переменные:
В таком случае мы можем использовать typeof, чтобы узнать тип переменной foo.
Важно запомнить, что typeof не следует использовать для null, если мы напишем:
В терминале отобразится ‘object’. Вместо этого следует использовать оператор === ://
Другой пример содержит boolean значения.
Мы также можем проверить числа следующим образом:
Обратите внимание, что NaN и вычисления, которые возвращают NaN, такие как Number(‘foo’ ), также относятся к типу ‘number’ . Мы должны проверить их с помощью метода Number.isNaN().
Также, можно использовать typeof для определения типа undefined:
Можно использовать для объектов, однако все объекты возвращают тип ‘object’, так что это не очень полезно:
Некоторые старые браузеры возвращают «функцию», когда мы применяем оператор typeof к литералам регулярных выражений. Однако сегодня это не должно быть проблемой.
Исключения
Typeof document.all всегда возвращает undefined, даже если он определен во всех браузерах.
Оператор instanceof
Оператор instanceof проверяет, появляется ли свойство прототипа конструктора где-либо в цепочке прототипов объекта.
Это означает, что мы можем использовать его, чтобы проверить, является ли объект конструктором из данного класса или функции-конструктора.
Он возвращает true, если объект является экземпляром класса или функции-конструктора, и false в противном случае.
Например, если у нас есть:
В терминале будет два «true»
Все, что создано с помощью new, можно проверить с помощью оператора instanceof.
Instanceof полезен для проверки всего, что создано с помощью оператора new, включая строки, логические значения и числа.
Например, если у нас есть:
Затем мы получаем ‘object’ из первого console.log и true для второго.
Это связано с тем, что мы создали экземпляр объекта String вместо строки примитивного значения, хотя в противном случае мы можем использовать примитивную строку и строковые объекты таким же образом.
Литеральные объекты
Литералы объектов, созданные без оператора new, являются экземплярами Object.
Итак, если у нас есть:
Все объекты являются экземплярами Object в дополнение к тому, что они являются экземплярами конструктора, из которого они созданы. Например, если у нас есть:
В обоих случаях выведутся значение true, поскольку date является экземпляром конструктора Date, а все непримитивные объекты являются экземплярами Object.
Выводы
Оператор typeof и instanceof совершенно разные. typeof возвращает тип объекта, над которым он работает.
Instanceof of возвращает true, если объект создан из данного конструктора, и false в противном случае.
Все непримитивные объекты являются экземплярами Object, поэтому он всегда будет возвращать true.
How do I get the type of a variable?
![]()
For static assertions, C++11 introduced decltype which is quite useful in certain scenarios.
![]()
If you have a variable
You can get its type using
See the following thread on SO: Similar question
![]()
The main difference between C++ and Javascript is that C++ is a static-typed language, wile javascript is dynamic.
In dynamic typed languages a variable can contain whatever thing, and its type is given by the value it holds, moment by moment. In static typed languages the type of a variable is declared, and cannot change.
There can be dynamic dispatch and object composition and subtyping (inheritance and virtual functions) as well as static-dispatch and supertyping (via template CRTP), but in any case the type of the variable must be known to the compiler.
If you are in the position to don’t know what it is or could be, it is because you designed something as the language has a dynamic type-system.
If that’s the case you had better to re-think your design, since it is going into a land not natural for the language you are using (most like going in a motorway with a caterpillar, or in the water with a car)
Как узнать тип переменной
БлогNot. Как в C++ программно узнать тип переменной?
Как в C++ программно узнать тип переменной?
Был вчера вопросик, а я не ответил впохыхах.
Коротко: для этого уже в стандарте C++98 есть оператор typeid:
Подробнее: посмотрим, как работает typeid со встроенными и с определёнными пользователем типами данных (прежде всего, классами).
Прилагаемый маленький листинг из консоли Visual Studio 2015, думаю, хорошо показывает суть дела.
gettype
Возвращает тип PHP-переменной value . Для проверки типа переменной используйте функции is_* .
Список параметров
Возвращаемые значения
- "boolean"
- "integer"
- "double" (по историческим причинам в случае типа float возвращается "double" , а не просто "float" )
- "string"
- "array"
- "object"
- "resource"
- "resource (closed)" с PHP 7.2.0
- "NULL"
- "unknown type"
Список изменений
| Версия | Описание |
|---|---|
| 7.2.0 | Для закрытых ресурсов теперь возвращается 'resource (closed)' . Ранее для закрытых ресурсов возвращалось 'unknown type' . |
Примеры
Пример #1 Пример использования gettype()
$data = array( 1 , 1. , NULL , new stdClass , ‘foo’ );
foreach ( $data as $value ) <
echo gettype ( $value ), «\n» ;
>
Результатом выполнения данного примера будет что-то подобное:
Смотрите также
- get_debug_type() — Возвращает имя типа переменной в виде, подходящем для отладки
- settype() — Задаёт тип переменной
- get_class() — Возвращает имя класса, к которому принадлежит объект
- is_array() — Определяет, является ли переменная массивом
- is_bool() — Проверяет, является ли переменная булевой
- is_callable() — Проверяет, что значение может быть вызвано как функция в текущей области видимости
- is_float() — Проверяет, является ли переменная числом с плавающей точкой
- is_int() — Проверяет, является ли переменная целым числом
- is_null() — Проверяет, является ли значение переменной равным null
- is_numeric() — Проверяет, является ли переменная числом или строкой, содержащей число
- is_object() — Проверяет, является ли переменная объектом
- is_resource() — Проверяет, является ли переменная ресурсом
- is_scalar() — Проверяет, является ли переменная скалярным значением
- is_string() — Проверяет, является ли переменная строкой
- function_exists() — Возвращает true, если указанная функция определена
- method_exists() — Проверяет, существует ли метод в данном классе
User Contributed Notes 1 note
Same as for «boolean» below, happens with integers. gettype() return «integer» yet proper type hint is «int».
If your project is PHP8+ then you should consider using get_debug_type() instead which seems to return proper types that match used for type hints.