1. Функция:
Оператор TypeOF возвращает строку, которая представляет тип данных выражения.
Возможные строки: «номер», «строка», «логический», «объект», «функция» и «неопределенные».
2. Описание общеиспользуемого возвращаемого значения
| выражение | Возвращаемое значение |
| тип не определенного | 'неопределенный' |
| тип нуля | 'объект' |
| typeof true | 'логический' |
| Тип 123 | 'число' |
| Тип "ABC" | 'нить' |
| typeof function () {} | 'функция' |
| typeof {} | 'объект' |
| typeof [] | 'объект' |
| тип неизвестного | 'неопределенный' |
Примечание: возвращаемые значения типа - все строки, и все они являются нижними заголовками.
3. Регулярное приложение:
1). Проверьте, существует ли переменная и имеет значение.
TypeOF будет возвращать «неопределенные» в двух случаях: когда переменная не объявлена, и когда значение переменной не определена. Например:
> typeof undeclaredVariable === "не определен" True
> var объявляет;
> typeof declaredVarible 'undefined'
> тип неопределенного 'не определен
Есть и другие способы определить, является ли значение неопределенным:
> var value = не определен;
> value === Неопределенная истина
Однако, если этот метод используется на не выявленной переменной, будет выброшено исключение, потому что только тип может обнаружить невернованные переменные обычно, не сообщая об ошибке:
> undeclaredVariable === не определяемый ссылка и не определяется
ПРИМЕЧАНИЕ. Неинициализированные переменные, формальные параметры, которые не передаются в параметрах, и несуществующие свойства не будут иметь вышеуказанные проблемы, поскольку они всегда доступны, а значения всегда не определены:
> var объявляет;
> DeclaredVariable === Неопределенный True
> (function (x) {return x === undefined} ()) true
> ({}). foo === Неопределенное True
Примечание. Поэтому if (window.maybeundeclaredVariable) {}
Вопрос: TypeOF кажется сложным при выполнении таких задач.
Решение: такая операция не очень распространена, поэтому некоторые люди думают, что нет необходимости находить лучшее решение. Однако кто -то может предложить специального оператора:
> Определенный неэкляриновидный ложь
> var объявляет;
> Определенные объявленные ложные
Или, может быть, кому -то нужен оператор, который обнаруживает, объявлена ли переменная:
> объявлен невидимым ложным
> var объявляет;
> объявлено объявленным правдивым
Примечание переводчика: в Perl определенный оператор выше эквивалентен определению (), а заявленный оператор выше эквивалентен существующему (),
2. Определите, что значение не равное неопределенному и не равно нулю
ВОПРОС: Если вы хотите определить, было ли определено значение (значение не является неопределенным или нулевым), то вы столкнулись с странным проявлением TypeOF (который считается ошибкой): TypeOf NULL возвращает «объект»::
> typeof null 'объект'
Примечание. Это можно сказать, что это ошибка только в оригинальной реализации JavaScript, и стандарт теперь стандартизирован. V8 однажды исправил и реализован TypeOf null === "NULL", но это, наконец, оказалось невозможным. http://wiki.ecmascript.org/doku.php?id=harmony:typeof_null
Решение: не используйте TypeOF для выполнения этой задачи, используйте следующий метод вместо этого: однако, переменная x должна быть объявлена заранее, в противном случае будет сообщена ошибка.
функция ISdefined (x) {return x! == null && x! == не определен; }
Другая возможность - представить «оператор значения по умолчанию». Если MyValue не определен, следующее выражение вернет DefaultValue:
myvalue || DefaultValue
Вышеуказанное выражение эквивалентно:
(myValue! == не определено && myValue! == null)? MyValue: DefaultValue
На самом деле, это упрощение следующего утверждения:
myValue = myValue || DefaultValue
3. Различают значения объекта и исходные значения
Следующая функция используется для определения того, является ли x значением объекта:
функция isobject (x) {return (typeof x === "function" || (typeof x === "Object" && x! == null)); }
Проблема: вышеупомянутое обнаружение является более сложным, потому что тип обработок функций и объектов как разные типы, а тип нуля возвращает «объект».
Решение: следующие методы также часто используются для обнаружения значений объектов:
функция isobject2 (x) {return x === Object (x); }
ПРЕДУПРЕЖДЕНИЕ: Вы можете подумать, что экземпляр объекта может быть использован для обнаружения его здесь, но экземпляр используется для оценки отношения экземпляра, используя прототип с использованием объекта. Итак, что мне делать, если объект без прототипа:
> var obj = object.create (null);
> Object.getPrototypeof (obj) null
OBJ действительно объект, но это не экземпляр какого -либо значения:
> typeof obj 'объект'
> obj экземпляр объекта false
На практике вы можете редко столкнуться с таким объектом, но он существует и имеет свою цель.
Примечание переводчика: объект. Прототип - это объект, который существует по умолчанию и не имеет прототипа.
> Object.getPrototypeof (object.prototype) null
> typeOf object.prototype 'Object'
> Object.prototype exantementof object false
4. Каков тип исходного значения?
TypeOF - лучший способ просмотреть тип определенного исходного значения.
> typeof "abc" 'String'
> тип неопределенного 'не определен
Вопрос: Вы должны знать странное поведение TypeOf NULL.
> TypeOf NULL // Будьте осторожны! 'объект'
Решение: Следующая функция может решить эту проблему (только для этого случая использования).
функция getPrimitivePeName (x) {
var typename = typeof x;
Switch (typename) {
Дело "не определено": case "boolean": case "№": case "String": вернуть типновое имя;
case "Object": if (x === null) {return "null"; }
по умолчанию: // предыдущее решение не удалось принять новую TypeError («Параметр не является примитивным значением:»+x);
}}
Лучшее решение: реализовать функцию getTypEname (), которая может не только вернуть тип исходного значения, но и вернуть атрибут внутреннего [[class]] значения объекта. Здесь мы говорим о том, как реализовать эту функцию (Примечание переводчика: $ .type в jQuery - это реализация, подобная этой)
5. Будь то значение функцией
TypeOF может использоваться для определения того, является ли значение функцией.
> typeof function () {} 'function'
> typeof object.prototype.tostring 'function'
В принципе, экземпляр функции также может выполнять этот вид обнаружения требований. На первый взгляд, кажется, что письмо более элегантно. Тем не менее, в браузере есть причуда: в каждой структуре и окне есть своя глобальная переменная. Поэтому, если вы передаете объект в определенной структуре в другую структуру, экземпляр не будет работать должным образом, потому что эти две структуры имеют разные конструкторы. Вот почему в Ecmascript5 есть метод Array.isarray (). Было бы неплохо, если бы есть метод, который пересекает структуру, чтобы проверить, является ли объект экземпляром данного конструктора. Вышеуказанный GetTypEname () - это обходной путь, но, возможно, есть более фундаментальное решение.
6. Обзор
Следующее упомянуто должно быть самой неотложной необходимостью в JavaScript в настоящее время, и он может заменить некоторые функциональные функции текущих обязанностей TypeOF:
isdefined () (например, object.isdefined ()): он может использоваться в качестве функции или оператора
isobject ()
getTypEname ()
Механизм, который может обнаружить, является ли объект экземпляром указанного конструктора в разных рамках
Чтобы проверить, была ли была объявлена переменная для такого требования, может не потребоваться собственного оператора.
Приведенное выше резюме использования TypeOF в JS - весь контент, разделенный редактором. Я надеюсь, что это может дать вам ссылку, и я надеюсь, что вы сможете поддержать Wulin.com больше.