Javascript.RU

typeof

Описание, примеры

Вызов typeof возвращает строку, содержащую информацию о типе операнда.

Оператор typeof используется в двух формах:

  1. typeof operand
  2. typeof (operand)

Эти формы идентичны: можно использовать скобки, а можно и не использовать - работает одинаково.

Оператор возвращает тип в виде строки, например:

var a = 5
alert(typeof a) // "number"

var a = 'test'
alert(typeof a) // "string"

Тип typeof возвращается, исходя из следующей таблицы соответствия типам javascript:

Тип Результат
Undefined "undefined"
Null "object"
Boolean "boolean"
Number "number"
String "string"
Function "function"
Любой другой объект "object"

Часто возникают вопросы - почему и зачем таблица именно такая? Ответ простой: потому что так получилось по ходу развития javascript.

В старом javascript-коде можно увидеть применение typeof для проверки существования переменной:

if (typeof(var) == "undefined") { ... }

В современном javascript лучше писать:

if (window.var !== undefined) { ... }

или, зачастую, подойдет и просто:

if (window.var) { ... }

P.S. Использовать просто if(var) нельзя, так как доступ к неопределенной переменной вызовет ошибку. Ну а обращение к отсутствующему свойству глобального объекта window всего лишь вернет undefined

Кроме того, оператор typeof используется для полиморфизма. Например, следующая функция получает узел DOM или ID узла и в обоих случаях корректно прячет узел.

function hideNode(node) {
  if (typeof node == 'string') {
    node = document.getElementById(node)
  }
  node.style.display = 'none'
}

См. также


Автор: Vladimir_O, дата: 27 ноября, 2009 - 17:09
#permalink

>>можно писать:

if (window.var !== undefined) { ... }

Думаю что так писать не стоит. Вот пример, когда этот метод не сработает:

undefined = 1; // Вот взяли и определили переменную, 
//... и она теперь совсем не 'undefined'
if (window.var !== undefined) { ... }

Автор: Илья Кантор, дата: 28 ноября, 2009 - 08:57
#permalink

Никто в здравом уме не будет переопределять undefined во что-либо другое.


Автор: Vladimir_O, дата: 11 декабря, 2009 - 18:33
#permalink

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


Автор: Илья Кантор, дата: 12 декабря, 2009 - 12:54
#permalink

Забавный комментарий. На чей здравый ум не стоит полагаться? На свой или на чужой?


Автор: Vladimir_O, дата: 16 декабря, 2009 - 19:07
#permalink

Конечно же на чужой . Ведь в большинстве случаев я использую сторонние библиотеки.


Автор: Гость (не зарегистрирован), дата: 22 ноября, 2011 - 17:00
#permalink

if (window.var !== undefined) { ... }

без объявленной переменной undefined вы сравниваете одну несуществующую переменной с другой;) сравнивать нужно со строкой "undefined" (в кавычках!!!), так что проблемы с объявлением переменной undefined никакой нет!!!


Автор: Гость (не зарегистрирован), дата: 7 декабря, 2009 - 20:49
#permalink

Как то вы объясняете плохо. Пока в другом месте не нашел непонятно.
Операция typeof возвращает строку, содержащую информацию о типе операнда. Она имеет вид:
typeof expr или typeof(expr)

где expr — любое выражение. Возвращаемое значение может быть одной из шести строк: "number" (число), "string" (строка), "boolean" (логическое значение), "object" (объект), "function" (функция) или "undefined" (неопределенное значение). Примеры:
var size = 1;
var shape = "круглый";
var today = new Date();
typeof(size); // возвращает "number"
typeof shape; // возвращает "string"
typeof today; // возвращает "object"


Автор: Dmitry A. Soshnikov, дата: 13 декабря, 2009 - 13:40
#permalink

В современном javascript оператор typeof практически не используется. Например, вместо проверки:

if (typeof(var) == "undefined") { ... }

можно писать:

if (window.var !== undefined) { ... }

или, зачастую, подойдет и просто:

if (window.var) { ... }

Вообще, по смысловой нагрузке, проверка существования переменной в объекте переменных, либо, что эта переменная имеет значение undefined, может быть осуществлена либо через:

typeof foo == 'undefined';

либо (в глобальной области) с помощью оператора in:

'foo' in window

Опять же, проверка с typeof позволяет проверить наличие переменной и во вложенном контексте (например, в функции), чего нельзя сделать при помощи window.var или window.var !== undefined. Более того, в предпоследнем случае, объект может иметь значение false, что полностью меняет смысл проверки.

Поэтому, typeof вполне себе используется в современном ES.


Автор: Илья Кантор, дата: 13 декабря, 2009 - 15:10
#permalink

Теоретически да, typeof может проверить наличие переменной в текущем контексте.
Однако, в реальных приложениях на современном(да и на несовременном тоже) javascript этого не нужно.
Локальная переменная, объявленная при помощи var, не нуждается в typeof: достаточно простого if (myVar !== undefined).

Поэтому для проверки на undefined оператор typeof в современном javascript не используется.


Автор: Glaz (не зарегистрирован), дата: 29 марта, 2010 - 19:23
#permalink

Т.е. предлагаете делать две проверки на существование переменной в контекстах?

if (myVar !== undefined && window.myVar)

Автор: Shock, дата: 8 марта, 2011 - 13:59
#permalink

А вы не знаете, что творится в локальном контексте вашей функции? Если у вас есть переменная в локальном контексте - проверяйте её без typeof, если нету, то зачем её вообще проверять?


Автор: agentcoba (не зарегистрирован), дата: 2 января, 2010 - 23:57
#permalink

А если я хочу проверить является ли переменная именно целым числом, то никак?? что мне, циклом разбивать его и проверять каждый символ? //


Автор: B@rmaley.e><e (не зарегистрирован), дата: 3 января, 2010 - 11:03
#permalink
var num = 5;
alert( num % 1 == 0 )

Автор: eZH! (не зарегистрирован), дата: 1 февраля, 2010 - 13:23
#permalink

остаток от деления на 1 всегда 0, делить нада на 2


Автор: B@rmaley.e><e, дата: 1 февраля, 2010 - 16:03
#permalink

Давычо?!

alert( 5.1 % 1 )

Мы проверяем не на четность / нечетность, а на целость / дробность.


Автор: Arm (не зарегистрирован), дата: 21 мая, 2010 - 09:55
#permalink

комментаторов выше в топку.
type==undefined работает далеко не всегда, особенно в ИЕ.
не приходилось видеть сообщение undefined is undefined? ))
приходится использовать конструкцию
if (typeof myvar == 'undefined' || typeof myvar=='null' || typeof myvar=='unknown') {


Автор: bdiang, дата: 24 мая, 2010 - 13:42
#permalink

Что еще за typeof myvar=='null'?


Автор: Increazon, дата: 30 декабря, 2010 - 08:09
#permalink

Проверил, в ИЕ работает.

function Log(what)
{
	if (typeof(console) == "object") console.log(what);
}

function Dir(what)
{
	if (typeof(console) == "object") console.dir(what);
}

Это для отладки в Firefox Firebug. После отладки функции можно не закоментирововать и не удалять. Можна готовую работу заказщику отправлять.


Автор: Shock, дата: 8 марта, 2011 - 14:04
#permalink

Лучше так

new function () {
  var debug    = true;
  var original = window.console;
  window.console = {};
  ['log', 'dir', /* остальные методы */].forEach(function (method) {
    console[method] = function () {
      return (debug && original) ? original[method].apply(original, arguments), 
    }
  });
};

Автор: _JoHn_ (не зарегистрирован), дата: 15 февраля, 2011 - 02:28
#permalink

Number.MIN_VALUE > 0; // true or false?

typeof null; // what type?
null === Object; // true or false?

// и самый сок

NaN === NaN; // true or false?

typeof NaN; // what type?


Автор: _JoHn_ (не зарегистрирован), дата: 15 февраля, 2011 - 02:30
#permalink

Number.MIN_VALUE > 0; // true
/*
Дело в том, что MIN_VALUE это наименьшее число, БОЛЬШЕ НУЛЯ
*/

typeof null; // object
null === Object; // false
/*
null, хоть и имеет тип "object", не является Object'ом
*/

NaN === NaN; // false
/*
Впечатляет, да? Я не могу найти этому объяснения. Автор же просто предполагает, что некоторые люди любят иногда понюхать клей...
*/

typeof NaN; // number
/*
Вот это сильно. Если вдруг кто не помнит, NaN — not a number.
*/


Автор: Гость (не зарегистрирован), дата: 5 апреля, 2011 - 15:18
#permalink

NaN === NaN; // false
Логически всё верно. NotaNumber1 = object1. NotaNumber2 = object2. object1 != object2. следовательно, NaN != NaN ни при каких обстоятельствах.


Автор: И.В.Ануш-ка (не зарегистрирован), дата: 7 декабря, 2011 - 21:12
#permalink

typeof null; // object
null === Object; // false
/*
null, хоть и имеет тип "object", не является Object'ом
*/

В том, что ключевое слово null не равняется ссылке на конструктор объекта, есть что-то неожиданное или неправильное?
'blabla' === String тоже вернет false, и что?


Автор: xpostman (не зарегистрирован), дата: 18 апреля, 2011 - 20:15
#permalink
if( var )

опасный способ. всё время нужно думать о том, что var может быть определена, но кастоваться в false. имхо, это стоит добавить в статью.


Автор: Наше имя (не зарегистрирован), дата: 15 декабря, 2011 - 19:38
#permalink
if ( !! var )

Отправить комментарий

Приветствуются комментарии:
  • Полезные.
  • Дополняющие прочитанное.
  • Вопросы по прочитанному. Именно по прочитанному, чтобы ответ на него помог другим разобраться в предмете статьи. Другие вопросы могут быть удалены.
    Для остальных вопросов и обсуждений есть форум.
P.S. Лучшее "спасибо" - не комментарий, как все здорово, а рекомендация или ссылка на статью.
Содержание этого поля является приватным и не предназначено к показу.
  • Адреса страниц и электронной почты автоматически преобразуются в ссылки.
  • Разрешены HTML-таги: <strike> <a> <em> <strong> <cite> <code> <ul> <ol> <li> <dl> <dt> <dd> <u> <i> <b> <pre> <img> <abbr> <blockquote> <h1> <h2> <h3> <h4> <h5> <p> <div> <span> <sub> <sup>
  • Строки и параграфы переносятся автоматически.
  • Текстовые смайлы будут заменены на графические.

Подробнее о форматировании

CAPTCHA
Антиспам
6 + 9 =
Введите результат. Например, для 1+3, введите 4.
 
Поиск по сайту
Реклама

Содержание

Учебник javascript

Основные элементы языка

Сундучок с инструментами

Интерфейсы

Все об AJAX

Оптимизация

Разное

Дерево всех статей

Последние темы на форуме
Forum
Последние комментарии