--- sidebar_position: 5 --- # Проверка класса: "instanceof" | | работает для | возвращает | |-------------|----------------------------------------------------------------|------------| | typeof | примитивов | строка | | {}.toString | примитивов, встроенных объектов, объектов с Symbol.toStringTag | строка | | instanceof | объектов | true/false | Как мы можем видеть, технически `{}.toString` «более продвинут», чем `typeof`. А оператор `instanceof` – отличный выбор, когда мы работаем с иерархией классов и хотим делать проверки с учётом наследования. ## Оператор instanceof ```js obj instanceof Class ``` Оператор вернёт `true`, если `obj` принадлежит классу Class или наследующему от него. ## Object.prototype.toString возвращает тип У `toString` имеются скрытые возможности, которые делают метод гораздо более мощным. Мы можем использовать его как расширенную версию `typeof` и как альтернативу `instanceof`. Согласно спецификации встроенный метод `toString` может быть позаимствован у объекта и вызван в контексте любого другого значения. И результат зависит от типа этого значения. - Для числа это будет [object Number] - Для булева типа это будет [object Boolean] - Для null: [object Null] - Для undefined: [object Undefined] - Для массивов: [object Array] - …и т.д. (поведение настраивается). ## Symbol.toStringTag Поведение метода объектов `toString` можно настраивать, используя специальное свойство объекта `Symbol.toStringTag`. ```js // toStringTag для браузерного объекта и класса alert( window[Symbol.toStringTag]); // window alert( XMLHttpRequest.prototype[Symbol.toStringTag] ); // XMLHttpRequest alert( {}.toString.call(window) ); // [object Window] alert( {}.toString.call(new XMLHttpRequest()) ); // [object XMLHttpRequest] ``` В итоге мы получили «typeof на стероидах», который не только работает с примитивными типами данных, но также и со встроенными объектами, и даже может быть настроен. Можно использовать `{}.toString.call` вместо `instanceof` для встроенных объектов, когда мы хотим получить тип в виде строки, а не просто сделать проверку.