mozilla
Your Search Results

    typeof

    Краткое описание

    Оператор typeof возвращает строкууказывающую тип операнда, не производя конечных вычислений

    Синтаксис

    Оператор typeof следует за своим операндом:

    typeof операнд

    Параметры

    операнд является выражением, представляющим объект или primitive, тип которого должен быть возвращен.

    Описание

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

    Type Result
    Undefined "undefined"
    Null "object" (see below)
    Boolean "boolean"
    Number "number"
    String "string"
    Symbol (новый тип из ECMAScript 6) "symbol"
    Host object (определено JS средой) Зависит от имплементации
    Function object (имплементирует [[Call]] в ECMA-262 условиях) "function"
    Любой другой тип "object"

    Примеры

    Обычные случаи применения

    // Числа
    typeof 37 === 'number';
    typeof 3.14 === 'number';
    typeof Math.LN2 === 'number';
    typeof Infinity === 'number';
    typeof NaN === 'number'; // Несмотря на то, что это "Not-A-Number" (не число)
    typeof Number(1) === 'number'; // Никогда не используйте эту запись!
    
    
    // Строки
    typeof "" === 'string';
    typeof "bla" === 'string';
    typeof (typeof 1) === 'string'; // typeof всегда вернет в этом случае строку
    typeof String("abc") === 'string'; // Никогда не используйте эту запись!
    
    
    
    // Booleans
    typeof true === 'boolean';
    typeof false === 'boolean';
    typeof Boolean(true) === 'boolean'; // Никогда не используйте эту запись!
    
    
    
    // Символы
    typeof Symbol() === 'symbol'
    typeof Symbol('foo') === 'symbol'
    typeof Symbol.iterator === 'symbol'
    
    
    // Не определено
    typeof undefined === 'undefined';
    typeof blabla === 'undefined'; // Неопределенная переменная
    
    
    // Объекты
    typeof {a:1} === 'object';
    
    // Используйте Array.isArray или Object.prototype.toString.call
    // чтобы дифференцировать регулярные объекты массивов
    typeof [1, 2, 4] === 'object';
    
    typeof new Date() === 'object';
    
    
    // То что ниже приводит к ошибкам и проблемам. Не использовать!
    typeof new Boolean(true) === 'object'; 
    typeof new Number(1) === 'object'; 
    typeof new String("abc") === 'object';
    
    
    // Функции
    typeof function(){} === 'function';
    typeof Math.sin === 'function';
    

    null

    // Это было определено с рождения JavaScript
    typeof null === 'object'; 

    В первой реализации JavaScript значения были представлены как тип тега и значения. Тип тега для объектов был 0. null был представлен как указатель null (0x00 в большинстве платформ). Следовательно, null был нулем как тип тег, поэтому typeof возвращаемое значение - поддельно. (подробнее)

    Исправление было предложено в ECMAScript (через отключение), но было отклонено. Это привело бы к тому, что typeof null === 'null'.

    Регулярные выражения

    Вызываемые регулярные выражения были нестандартным дополнением в некоторых браузерах.

    typeof /s/ === 'function'; // Chrome 1-12 Не соответствует ECMAScript 5.1
    typeof /s/ === 'object';   // Firefox 5+  Соответствует ECMAScript 5.1
    

    Спецификация

    Спецификация Статус Комментарий
    ECMAScript 1st Edition. Standard Начальное определение. Имплементировано в  JavaScript 1.1
    ECMAScript 5.1 (ECMA-262)
    Определение 'The typeof Operator' в этой спецификации.
    Стандарт  
    ECMAScript 6 (ECMA-262)
    Определение 'The typeof Operator' в этой спецификации.
    Кандидат в рекомендации  

    Совместимость с браузерами

    Feature Chrome Firefox (Gecko) Internet Explorer Opera Safari
    Basic support (Да) (Да) (Да) (Да) (Да)
    Feature Android Chrome for Android Firefox Mobile (Gecko) IE Mobile Opera Mobile Safari Mobile
    Basic support (Да) (Да) (Да) (Да) (Да) (Да)

    Хост-объекты IE являются объектами, а не функциями

    В IE 6, 7, и 8 большинство хост-объектов это объекты, а не функции. Например:

    typeof alert === 'object'

    Смотрите также

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

    Contributors to this page: teoli, SphinxKnight, kvantor
    Обновлялась последний раз: SphinxKnight,
    Скрыть боковую панель