Contactos

Javascript Comprobar el tipo de variable. Cómo verificar el tipo de variable en JavaScript. Operador de recibo de tipo

JavaScript. o Js. (Abreviado) No es un lenguaje simple y los desarrolladores novatos no lo sabrán de inmediato. Al principio reconocen lo básico y todo parece colorido y hermoso. Buscando un poco más profundo, JavaScript aparece matrices, objetos, devoluciones de llamada y todo lo que a menudo hace el cerebro.

JavaScript es importante para verificar correctamente el tipo de variable. Supongamos que desea saber si una variable con una matriz u objeto? ¿Cómo comprobarlo bien? En este caso particular, hay trucos durante la inspección y esta será esta entrada. Vamos a continuar inmediatamente.

Cheque de tipo variable

Por ejemplo, debe verificar que es una variable de objeto, una matriz, una cadena o un número. Para hacer esto, puede usar TipoF, pero no siempre le dará la verdad y, en el siguiente ejemplo, mostraré por qué.

Escribí este ejemplo para mostrar vívidamente por qué TipoF no siempre es la opción correcta.

Var _comparison \u003d (cadena: "cadena", int: 99, flotador: 13.555, objeto: (hola: "hola"), matriz: nueva matriz (1, 2, 3)); // devuelve una matriz con las teclas del objeto VAR _OBJKEYS \u003d Object.Keys (_comparison); para (var i \u003d 0; i<= _objKeys.length - 1; i++) { // выведем в консоль тип каждой переменной console.log(typeof _comparson[_objKeys[i]]); }

Resultado de la ejecución del código:

Objeto número número objeto objeto

¿Derecha? - Por supuesto que no. Hay dos problemas. Cada uno de ellos se describirá en detalle y se sugirió.

Primer problema: número de flotador, salida como número

Comparación. Flotar no es un número y en lugar de número debe ser flotante.

Var _floatnumber \u003d 9.22; var _notfloatnumber \u003d 9; Console.log (isfloat (_floatnumber)); Console.log (isfloat (_notfloatnumber)); Console.log (isfloat (")); Función IsFloat (N) (Número de retorno (N) \u003d\u003d\u003d N && N% 1! \u003d\u003d 0;)

La función ISFLOAT () realiza la comprobación de todos los valores a los números de puntos flotantes. Se marca primero si la variable es igual nORTE. Número (Número (N) \u003d\u003d\u003d N) y en caso afirmativo, entonces se realiza otra verificación de validación con el residuo y si hay un residuo, entonces regresa Buleva ( cierto. o falso) Resultado (n% 1! \u003d\u003d 0).

En el ejemplo anterior, devuelve. cierto., falso y falso. El primer valor es flotador.escriba, el segundo no es, este es el número habitual y la última cadena vacía que no se adapta a las reglas.

Segundo problema: la matriz se determinó como objeto.

En el primer ejemplo, la matriz se mostró como un objeto y no es muy bueno, ya que a veces necesitas usar este tipo en particular y nada más.

Hay varias formas de verificar la variable en el tipo de matriz.

Primera opción (buena opción). Compruebe el accesorio de datos a la matriz usando InscritoF ().

Var datos \u003d nueva matriz ("hola", "mundo"); Var isarr \u003d instancia de datos de matriz;

Segunda versión (buena opción). El método Array.Sarray () devuelve el valor booleano, que dependerá de si la variable es una matriz o no ().

Var datos \u003d nueva matriz ("hola", "mundo"); var isarr \u003d array.isarray (datos);

Tercera opción (lo mejor, pero largo). Para mayor comodidad, puede hacer esta forma. Usando el objeto, lo hacemos. Si el objeto de resultado.Prototype.Tostring.call (datos) no es igual a la variable no es una matriz ().

Var datos \u003d nueva matriz ("hola", "mundo"); var isarr \u003d objeto.prototype.tostring.call (datos) \u003d\u003d ""; Console.log (is ararr);

El último resultado en forma de una función conveniente:

Función ISARRAY (DATOS) (devolución de objetos.prototype.tostring.call (DATOS) \u003d\u003d ")

Ahora puede llamar a las funciones de Isarray () y como argumento para establecer una matriz o algo más y ver el resultado.

Palabra después

La grabación resultó bastante grande de lo que pensaba originalmente. Pero estoy satisfecho con eso, porque ella describe brevemente y claramente las dificultades al verificar las variables en JavaScript y cómo moverlas.

Si tiene alguna pregunta, escríbalos a continuación a este registro. Estaré encantado de ayudar.

Operador Tipo de. Devuelve la cadena que indica el tipo de operando.

Sintaxis

Operand sigue al Operador TipoF:

Tipo de. operando.

Parámetros

operando. Es una expresión que representa un objeto o un primitivo, cuyo tipo debe ser devuelto.

Descripción

La siguiente tabla muestra los posibles valores de Tipo de devolución. Información adicional sobre los tipos y las primitivas está en la página.

Ejemplos

// Números tipo 37 \u003d\u003d\u003d "Número"; TipoF 3.14 \u003d\u003d\u003d "Número"; TipoF (42) \u003d\u003d\u003d "Número"; Typef math.ln2 \u003d\u003d\u003d "número"; TipoF Infinity \u003d\u003d\u003d "Número"; TipoF NAN \u003d\u003d\u003d "Número"; // A pesar del hecho de que es "Not-A-número" (no número) tipo de tipo (1) \u003d\u003d\u003d "Número"; // nunca use esta entrada! // Tipo de cadena de "" \u003d\u003d\u003d "cadena"; TipoF "BLA" \u003d\u003d\u003d "STRING"; TipoF "1" \u003d\u003d\u003d "cadena"; // Tenga en cuenta que el número dentro de la cadena todavía tiene un tipo de cadena TipoF (TipoF 1) \u003d\u003d\u003d "cadena"; // TypeF siempre volverá en este caso la cadena de cadena TypeF ("ABC") \u003d\u003d\u003d "STRING"; // nunca use esta entrada! // booleans typef true \u003d\u003d\u003d "boolean"; TipoF falso \u003d\u003d\u003d "booleano"; Tipo de booleano (verdadero) \u003d\u003d\u003d "booleano"; // nunca use esta entrada! // Syms Symbols Symbol () \u003d\u003d\u003d "símbolo" tipo símbolo ("foo") \u003d\u003d\u003d "símbolo" tipo símbolo.ritador \u003d\u003d\u003d "símbolo" // tipo no definido de undefined \u003d\u003d\u003d "indefinido"; TipoF DeclaredButundaDneFinedVariable \u003d\u003d\u003d "indefinido"; TipoF undeclaredVariable \u003d\u003d\u003d "indefinido"; // OBJETOS TIPOF (A: 1) \u003d\u003d\u003d "objeto"; // use Array.isArray u objeto.prototype.Tostring.call // para distinguir entre los objetos usuales y los arreglos de tipo \u003d\u003d\u003d "objeto"; Tipo de nueva fecha () \u003d\u003d\u003d "objeto"; // Eso más bajo conduce a errores y problemas. ¡No utilice! Tipo de nuevo booleano (verdadero) \u003d\u003d\u003d "objeto"; Tipo de nuevo número (1) \u003d\u003d\u003d "objeto"; Tipo de nueva cadena ("ABC") \u003d\u003d\u003d "objeto"; // Funciones TipoF Función () () \u003d\u003d\u003d "Función"; Tipo de clase C () \u003d\u003d\u003d "Función"; Typef mathsin \u003d\u003d\u003d "Función";

nULO

// se determinó a partir del nacimiento de JavaScript TipoF NULL \u003d\u003d\u003d "OBJETO";

En la primera implementación de JavaScript, los valores fueron presentados por un tipo de etiqueta y valor de un par. La etiqueta de etiqueta para los objetos fue 0. NULL se representó como un puntero cero (0x00 en la mayoría de las plataformas). En consecuencia, el tipo de etiqueta para NULL fue cero, por lo que el valor de retorno de TipoF es ficticio. ()

Se preguntó la corrección en ECMASCRIP (a través del cierre), pero fue rechazado. Esto llevaría al hecho de que TipoF NULL \u003d\u003d\u003d "NULL".

Usando el nuevo operador

// Todas las funciones, los diseñadores creados con "New" tendrán el tipo "objeto" var cadena \u003d nueva cadena ("cadena"); var num \u003d nuevo número (100); TipoF STR; // devolver "objeto" typef num; // devolverá "Objeto" // Pero hay una excepción para la función VAR FUNC \u003d nueva función () constructor; TipoF FUNC; // retorno "Función"

Expresiones regulares

Las expresiones regulares llamadas fueron suplementos no estándar en algunos navegadores.

Typef / s / \u003d\u003d\u003d "Función"; // Chrome 1-12 no coincide con ECMAScript 5.1 typef / s / \u003d\u003d\u003d "objeto"; // Firefox 5+ corresponde a ECMAScript 5.1

Errores asociados a zonas muertas temporales.

Antes de Ecmascript 2015, se garantizó que el Operador TipoF devolverá una cadena para cualquier operando con el que se llamó. Esto ha cambiado después de agregar anuncios de Let y Const no sumisos con área de bloques de visibilidad. Ahora, si las variables se declaran usando alquiler y const, y para ellos se llama TipoF en la unidad de declaración de clases, pero antes del anuncio, se expulsa referencerreror. El comportamiento difiere de las variables no declaradas para las cuales el tipo de devolverá "indefinido". Las variables con un área de bloques de visibilidad se encuentran en la "zona muerta temporal" que duran desde el principio del bloque hasta la declaración de variables. En esta zona, un intento de acceder a las variables es expedido una excepción.

TipoF undeclaredVariable \u003d\u003d\u003d "indefinido"; Tipo de NewletVariable; Deje que NewletVariable; // ReferenceError TipoF NewConstVariable; Const newconstvariable \u003d "hola"; // referenceError

Excepciones

En todos los navegadores actuales hay un documento no estándar. Todo el objeto host, que tiene un tipo indefinido.

TipoF Document.Tod \u003d\u003d\u003d "indefinido";

Aunque la especificación permite sus propios tipos de tipos para objetos exóticos no estándar, es necesario que estos nombres difieran de predefinidos. La situación en el documento. Todo lo que tiene un tipo indefinido debe considerarse como una violación excepcional de las reglas.

Especificaciones

Especificación Estado Comentarios
Borrador ÚLTIMO DE ECMASCRIPT (ECMA-262)
Sequía
Ecmascript 2015 (6ª edición, ECMA-262)
Definición "El Operador TipoF" en esta especificación.
Estándar
Ecmascript 5.1 (ECMA-262)
Definición "El Operador TipoF" en esta especificación.
Estándar
Ecmascript 3rd Edition (ECMA-262)
Definición "El Operador TipoF" en esta especificación.
Estándar
Ecmascript 1st Edition (ECMA-262)
Definición "El Operador TipoF" en esta especificación.
Estándar Definición inicial. Implementado en JavaScript 1.1

Compatibilidad con los navegadores.

Actualizar datos de compatibilidad en GitHub

OrdenadoresMóvilServidor
Cromo.Borde.Firefox.Explorador de Internet.Ópera.Safari.Webview de Android.Chrome para AndroidFirefox para AndroidOpera para AndroidSafari en iOS.Samsung internetNodo.js.
Tipo de.Cromo. Apoyo total 1 Borde. Apoyo total 12 Firefox. Apoyo total 1 ES DECIR. Apoyo total 3 Ópera. Apoyo totalSafari. Apoyo totalWebview Android Apoyo total 1 Chrome Android Apoyo total 18 Firefox Android Apoyo total 4 Opera Android Apoyo totalSafari iOS. Apoyo totalSamsung Internet Android Apoyo total 1.0 nodejs. Apoyo total

Leyenda

Apoyo total Apoyo total

Nociones específicas de es decir,

En IE 6, 7 y 8, muchos objetos de host son objetos, pero no características. Por ejemplo.

Identificación dinámica de tipos.

Identificación de tipo dinámico (RTTI) Le permite determinar el tipo de objeto durante la ejecución del programa. Resulta que es útil por varias razones. En particular, por referencia a la clase base, es posible determinar con bastante precisión el tipo de objeto disponible en este enlace. La identificación dinámica de los tipos también permite verificar de antemano qué tan exitoso será el resultado del tipo de tipo que traerá, previniendo la situación exclusiva en relación con la visualización incorrecta de los tipos. Además, la identificación dinámica de los tipos es el componente principal de la reflexión.

Para admitir la identificación dinámica de los tipos en C #, se proporcionan tres palabras clave: es, como y tipo de tipo. Cada una de estas palabras clave se considera a su vez más a su vez.

El operador es.

El tipo específico de objeto se puede determinar utilizando el operador. A continuación se muestra su forma común:

es la expresión de tipo

donde la expresión denota una expresión separada que describe el objeto cuyo tipo está marcado. Si la expresión tiene un tipo compatible o el mismo tipo que el tipo revisado, el resultado de esta operación es verdadero, de lo contrario falso. Por lo tanto, el resultado será cierto si la expresión tiene un tipo verificable en una forma u otra. En la declaración de tipo es, ambas se definen como compatibles si son el mismo tipo o si se proporciona transformación de referencia, envases o desembalaje.

A continuación se muestra un ejemplo de usar un operador es:

Utilizando sistema; Consolapplicación de espacio de nombres1 (Clase Agregar () Clase Suma: Agregar () Programa de clase (Página principal de vacío estático () (Agregar A \u003d NUEVO AÑADIR (); SUM S \u003d NUEVO SUM (); IF (A ADD ADD) Console.Writeline ("Variable A tiene un tipo agregado "); si (s es suma) console.writeline (" El tipo de variable S se hereda de la clase AD "); console.readline ();)))

Operador como

A veces, se requiere la conversión de tipo durante la ejecución, pero no genere una excepción si el resultado de esta conversión no tendrá éxito, lo que es bastante posible cuando se dan los tipos. Para este propósito, el operador AS tiene la siguiente forma:

como expresión de tipo

donde la expresión denota una expresión separada que se convierte en el tipo especificado.

Si el resultado de tal conversión resulta tener éxito, entonces se devuelve el enlace al tipo y, de lo contrario, es un enlace vacío. El operador AS solo se puede usar para convertir enlaces, identidad, embalaje, desempaque. En algunos casos, el operador AS puede servir como una alternativa conveniente al operador. Como ejemplo, considere el siguiente programa:

Utilizando sistema; Consolapplication de espacio de nombres1 (clase Agregar () Clase Suma: Agregar () Programa de clase (Página principal de vacío estático (); suma S \u003d nueva suma (); // Realizar el tipo A \u003d S AD; SI (A! \u003d NULL) Console.Writeline ("La conversión ha sido exitosa"); else console.writeline ("Error conversión"); consola.readline ();)))

El resultado de este programa será una conversión exitosa.

a \u003d (b\u003e 0) && (C + 1! \u003d D); Bandera \u003d! (Estado \u003d 0);

Tabla 14.5. Operadores lógicos

Descripción del operador

! No (inversión lógica)

&& Y (multiplicación lógica)

|| O (adición lógica)

Tabla 14.6. Los resultados de la ejecución de los operadores y o

Operand 1.

Operand 2.

Tabla 14.7. Los resultados de la ejecución del operador no

Operador de recibo de tipo

Operador de recibos de tipotipoF devuelve una cadena que describe el tipo de datos de operando. Operand, el tipo de lo que necesita saber se coloca después de este operador y entré en paréntesis:

s \u003d typef ("str");

Como resultado de la ejecución de esta expresión en la variable S, será una "cadena" de cadena, que denota un tipo de cadena.

Todos los valores que el Operador TipoF puede devolver se enumeran en la Tabla. 14.8.

Tabla 14.8. Valores devueltos por el tipo de operador.

Tipo de datos

Linea de retorno

Cuerda

Numérico

Tabla 14.8 (FINAL)

Tipo de datos

Linea de retorno

Lógico

Conversión de tipo de compatibilidad y tipo de datos.

Es hora de considerar dos temas más importantes: la compatibilidad de los tipos de datos y la conversión de un tipo a otro.

¿Qué pasa si se doblan dos valores numéricos? Eso es correcto, otro valor numérico. ¿Y si dobla el número y la cadena? Es difícil decir ... aquí JavaScript se enfrenta al problema de la incompatibilidad de los tipos de datos y trata de hacer que estos tipos sean compatibles, transformando uno de ellos a otro. Primero, trata de convertir una fila al número y, si se administra, realiza una adición. En caso de fallo, el número se transformará en la cadena, y las dos filas obtenidas se combinarán. Por ejemplo, como resultado de la implementación del escenario web de la listado 14.6, el valor de la variable B cuando se agrega de la variable A se convertirá en un tipo numérico; Por lo tanto, la variable C contendrá un valor 23.

LISTA 14.6.

var a, b, c, d, e, f; a \u003d 11;

b \u003d "12"; c \u003d a + b;

d \u003d "javascript"; E \u003d 2;

Pero dado que el valor de la variable D no se puede convertir a un número, el valor de E se convertirá en la cadena, y el resultado, el valor de F - será igual

Los valores lógicos se convierten a numéricos o en cadena, dependiendo del caso específico. El verdadero valor se convertirá al número 1 o la cadena "1", y el valor falso, en 0 o "0". A la inversa, el número 1 se convertirá en verdadero, y el número 0 es en falso. También en falso será transformado.

valores nulos e indefinidos.

Parte III. Páginas web de comportamiento. Escenarios web

Se puede ver que JavaScript lucha para realizar correctamente incluso expresiones escritas incorrectamente. A veces resulta, pero más a menudo todo funciona según lo planeado, y al final, la implementación del escenario web se interrumpe en relación con la detección de un error completamente en su otro lugar, en una declaración absolutamente correcta. Por lo tanto, es mejor prevenir tales incidentes.

Prioridad de los operadores

La última pregunta que veremos aquí están la prioridad de los operadores. Como recordamos, la prioridad afecta el orden en que los operadores se realizan en la expresión.

Deja que haya la siguiente expresión:

En este caso, se agregará primero al valor de la variable B, y luego se deducirá 10 de la cantidad. Los operadores de esta expresión tienen la misma prioridad y, por lo tanto, se ejecutan estrictamente de izquierda a derecha.

Ahora considera tal expresión:

Aquí, primero se realizará la multiplicación del valor de C por 10, y solo el valor B se agregará al resultado. El operador de multiplicación tiene una mayor prioridad que el operador de la adición, por lo que el orden "estrictamente de izquierda a derecha" se romperá.

La prioridad más baja para los operadores de asignación. Es por eso que la expresión en sí misma se calcula primero, y luego su resultado se asigna a una variable.

EN en general, el principio básico del cumplimiento de todos los operadores es el siguiente: los primeros operadores se realizan con una prioridad más alta, y solo los operadores posteriores con menor. Los operadores con la misma prioridad se realizan en el orden de ellos (de izquierda a derecha).

EN mesa. 14.9 Los operadores estudiados por nosotros se enumeran en el orden de sus prioridades.

Tabla 14.9. Prioridad de los operadores (en orden descendente)

Operadores

Descripción

++ - - ~! Tipo de.

Incremento, decremento, cambio de signo, no lógico, no, definición

Multiplicación, división, tomando un saldo

Adición y fusión de filas, resta.

Comparación de los operadores

Lógico I.

Capítulo 14. Introducción a la programación web. Lenguaje javascript

Tabla 14.9 (FINAL)

Operadores

Descripción

Lógico o

Operador Condicional (ver más abajo)

= <оператор>=

Asignación, simple y compleja.

¡ATENCIÓN!

Recuerda esta tabla. El procedimiento incorrecto para la realización de operadores puede causar errores difíciles en los que la expresión absolutamente correcta externamente da un resultado incorrecto.

Pero, ¿y si necesitamos romper el orden habitual de ejecución de los operadores? Utilizamos paréntesis. Con tal entrada entre paréntesis, los operadores se realizan primero:

a \u003d (B + C) * 10;

Aquí, primero se completará la adición de valores de variables B y C, y luego la cantidad resultante se multiplicará por 10.

Los operadores encerrados entre paréntesis también están sujetos a prioridad. Por lo tanto, se utilizan a menudo soportes múltiples:

a \u003d ((B + C) * 10 - D) / 2 + 9;

Aquí los operadores se realizarán en tal secuencia:

1. Adición B y C.

2. Multiplicando la cantidad recibida por 10.

3. Restar D desde el trabajo.

4. División de una diferencia para 2.

5. Adjunt a 9 a privado.

Si eliminas los soportes:

a \u003d B + C * 10 - D / 2 + 9;

el orden de ejecución de los operadores será:

1. Multiplicación C y 10.

2. Dividiendo D a 2.

3. Adición B y trabaja C y 10.

4. Resta de la cantidad recibida de la división privada.d 2.

5. Ajustado 9 a la diferencia obtenida.

Resulta un resultado completamente diferente, ¿verdad?



¿Te gustó el artículo? Compártelo