1. Función:
El operador typeof devuelve una cadena que representa el tipo de datos de la expresión.
Las cadenas posibles son: "número", "cadena", "booleano", "objeto", "función" y "indefinido".
2. Descripción del valor de retorno de uso común
| expresión | Valor de retorno |
| typeOf indefinido | 'indefinido' |
| tipo de typing nulo | 'objeto' |
| typeOf verdadero | 'booleano' |
| Typeof 123 | 'número' |
| tipo de "ABC" | 'cadena' |
| Función de typeof () {} | 'función' |
| typeof {} | 'objeto' |
| typeof [] | 'objeto' |
| tipo de desconocido Variable | 'indefinido' |
Nota: Los valores de retorno del tipo son todas las cadenas, y todos son encabezados en minúsculas.
3. Aplicación regular:
1). Verifique si existe una variable y tiene un valor.
TypeOf devolverá "indefinido" en dos casos: cuando no se declara una variable y cuando el valor de una variable está indefinido. Por ejemplo:
> typeOf sin -deflaredVariable === "indefinido" verdadero
> var declaradovariable;
> typeOf declaradovariable 'indefinido'
> typeOf indefinido 'indefinido'
Hay otras formas de detectar si un valor no está definido:
> Valor Var = Undefined;
> valor === Verdadero indefinado
Sin embargo, si este método se usa en una variable no declarada, se lanzará una excepción, porque solo TypeOf puede detectar variables no declaradas normalmente sin informar un error:
> UnclaredVariable === Referenceguror de referencia indefinido: UndeclaredVariable no está definido
Nota: Variables no inicializadas, parámetros formales que no se pasan en parámetros y propiedades inexistentes no tendrán los problemas anteriores, porque siempre son accesibles y los valores siempre están indefinidos:
> var declaradovariable;
> DeclaredVariable === Verdadero indefinado
> (function (x) {return x === Undefined} ()) Verdadero
> ({}). foo === Verdadero indefinado
Nota: Por lo tanto, if (window.maybeundeclaredvariable) {}
PREGUNTA: TypeOf parece complicado al completar tales tareas.
Solución: Este tipo de operación no es muy común, por lo que algunas personas piensan que no hay necesidad de encontrar una mejor solución. Sin embargo, alguien puede proponer un operador especial:
> Falso definido no declarado Variable
> var declaradovariable;
> definido declaradovariable falso
O tal vez alguien necesita un operador que detecte si se declara una variable:
> Declarado no declarado Variable Falso
> var declaradovariable;
> declarado declarado Variable Verdadero
Nota del traductor: en Perl, el operador definido anterior es equivalente a definido (), y el operador declarado anterior es equivalente a existe (),
2. Determine que un valor no es igual a indefinido y no es igual a NULL
Pregunta: Si desea detectar si se ha definido un valor (el valor no está indefinido o nulo), entonces se ha encontrado con una manifestación extraña de typeof (que se considera un error): typeOf null devuelve "objeto":
> typeOf null 'objeto'
Nota: Esto solo se puede decir que es un error en la implementación original de JavaScript, y el estándar ahora está estandarizado. V8 una vez corregió e implementó typeOf null === "nulo", pero finalmente resultó inviable. http://wiki.ecmascript.org/doku.php?id=harmony:Typeof_Null
Solución: no use typeOf para hacer esta tarea, use el siguiente método en su lugar: sin embargo, la variable x debe declararse de antemano, de lo contrario se informará un error.
función isdefined (x) {return x! == null && x! == undefined; }
Otra posibilidad es introducir un "operador de valor predeterminado". Si no se define myValue, la siguiente expresión devolverá defaultValue:
myValue || Valor predeterminado
La expresión anterior es equivalente a:
(myValue! == Undefined && myValue! == null)? myValue: defaultValue
De hecho, es una simplificación de la siguiente declaración:
myValue = myValue || Valor predeterminado
3. Distinga entre valores de objeto y valores originales
La siguiente función se usa para detectar si X es un valor de objeto:
function isObject (x) {return (typeof x === "function" || (typeof x === "objeto" && x! == null)); }
Problema: La detección anterior es más complicada porque los typeOf tratan las funciones y objetos como diferentes tipos, y los tipos de typing devuelven "objeto".
Solución: los siguientes métodos también se usan a menudo para detectar valores de objeto:
función isObject2 (x) {return x === objeto (x); }
ADVERTENCIA: Puede pensar que el installón del objeto se puede usar para detectarlo aquí, pero InstanceOf se usa para juzgar la relación de instancia utilizando un prototipo usando un objeto. Entonces, ¿qué debo hacer si un objeto sin un prototipo:
> var obj = object.create (nulo);
> Object.getPrototypeOf (OBJ) NULL
OBJ es de hecho un objeto, pero no es una instancia de ningún valor:
> typeOf obj 'object'
> Obj instancia de objeto falso
En la práctica, rara vez puede encontrar un objeto de este tipo, pero existe y tiene su propósito.
Nota del traductor: Object.prototype es un objeto que existe de forma predeterminada y no tiene un prototipo.
> Object.getPrototypeOf (Object.Prototype) NULL
> typeof object.prototype 'objeto'
> Object.prototype instancia de objeto falso
4. ¿Cuál es el tipo del valor original?
TypeOf es la mejor manera de ver un tipo de cierto valor original.
> typeof "ABC" 'String'
> typeOf indefinido 'indefinido'
Pregunta: Debe conocer el comportamiento extraño de TypeOf Null.
> typeOf null // ¡ten cuidado! 'objeto'
Solución: la siguiente función puede solucionar este problema (solo para este caso de uso).
función getPrimitivetyPename (x) {
var typename = typeof x;
Switch (Typename) {
caso "Undefinado": Caso "Booleano": Caso "Número": Caso "cadena": return typename;
caso "objeto": if (x === null) {return "null"; }
predeterminado: // El juicio anterior no pudo pasar el nuevo typeError ("El parámetro no es un valor primitivo:"+x);
}}
Una mejor solución: implementar una función getTyPeName (), que no solo puede devolver el tipo del valor original, sino también devolver el atributo interno [[clase]] del valor de objeto. Aquí hablamos sobre cómo implementar esta función (Nota del traductor: $.
5. Si un valor es una función
TypeOf se puede usar para detectar si un valor es una función.
> typeof function () {} 'función'
> typeof object.prototype.ToString 'Función'
En principio, la función de instancia también puede realizar este tipo de detección de requisitos. A primera vista, parece que la escritura es más elegante. Sin embargo, el navegador tiene una peculiaridad: cada marco y ventana tiene su propia variable global. Por lo tanto, si pasa un objeto en un determinado marco en otro marco, InstanceOF no funcionará correctamente porque los dos marcos tienen diferentes constructores. Es por eso que hay un método array.isArray () en ECMAScript5. Sería bueno si hay un método que cruza el marco para verificar si un objeto es una instancia de un constructor dado. El GetTyPeName () anterior es una solución, pero tal vez haya una solución más fundamental.
6. Descripción general
La siguiente mencionada debe ser la necesidad más urgente en JavaScript en la actualidad, y puede reemplazar algunas características funcionales de las responsabilidades actuales de TypeoF:
isDefined () (como Object.isDefined ()): se puede usar como una función o un operador
isObject ()
getTypename ()
Un mecanismo que puede detectar si un objeto es una instancia de un constructor especificado en los marcos
Para verificar si se ha declarado una variable para tal requisito, es posible que no sea necesario tener su propio operador.
El resumen anterior del uso de typeof en JS es todo el contenido compartido por el editor. Espero que pueda darle una referencia y espero que pueda apoyar más a Wulin.com.