Задайте свой вопрос о JavaScript на нашем форуме

typeof & instanceof

При написании JavaScript-сценариев часто используется функция typeof, возвращающая строковую метку о типе переданного аргумента. Рассмотрим работу функция typeof и её младшего брата - оператора instanceof.

typeof возвращает 6 типов значений, в зависимости от переданной переменной:

var obj = {}; // Объект
var func = function() {} // Функция
var num = 1; // Число
var str = ""; // Строка
var bool = true; // Логическая переменная
// Переменную undefinedVar специально не создаем
alert(
    typeof obj + ", " +
    typeof(func) + ", " +
    typeof num + ", " +
    typeof(str) + ", " +
    typeof bool + ", " +
    typeof(undefinedVar)
);
// Выведет "object, function, number, string, boolean, undefined"

Обратим внимание на следующие особенности:

  1. Допускается двоякий синтаксис, как для обычной функции: typeof(variable), так и для оператора: typeof variable.
  2. Значение object относится к любым типам объектов: хешам, массивам или датам.

С объектами как раз и помогает разобраться оператор instanceof, возвращающий данные о типе объекта (typeObject). Работа оператора проходит в режиме сравнения:

var dat = new Date(2001, 3, 23);
var arr = new Array();
alert (
    (dat instanceof Date) + ", " +
    (arr instanceof Array) + ", " +
    (arr instanceof Date) + ", " +
    (dat instanceof Array)
);
// Вернет "true, true, false, false"
// Что соответсвует действительности

Вот такой оператор, на который я по своему недосмотру долго не обращал внимание.

Александр Бурцев 4 мая 2007

© Все права на данную статью принадлежат порталу fastcoder.org. Перепечатка в интернет-изданиях разрешается только с указанием автора и прямой ссылки на оригинальную статью. Перепечатка в печатных изданиях допускается только с разрешения редакции.

Комментарии

skaurus 17 февраля 2009, 13:49 #
Эх, Саша, ты бы ещё не забывал про hasOwnProperty. А то любое загрязнение прототипа убивает твой визивиг. Оно, конечно, зло, но иногда дано нам свыше, так что надо уметь с ним жить.
 
Bur 17 февраля 2009, 13:56 #
hasOwnProperty - незаменимое свойство при построении цепочек прототипов, хочешь/не хочешь, а забыть не получится.
О каком, кстати, из висивигов идет речь?
 
Комментарий удален администратором
 
Bur 17 февраля 2009, 14:05 #
Пожалуй уберем коммент от посторонних глаз...
Отпиши в профиле что-нибудь, не узнаю по нику :-)
 
skaurus 17 февраля 2009, 14:11 #
постучал в агент
 
Kolyaj 18 июня 2009, 12:36 #
На массив нельзя проверять с помощью instanceof. На проверку вполне может прийти массив, созданный в другом окне/фрейме и тогда у него будет другой конструктор. Наилучший способ проверки:
function isArray(obj) {
    return Object.prototype.toString.call(obj) == '[object Array]';
}
Для Date аналогичный.
 
 
Rambler's Top100 Flede HTML valid CSS valid