Nuestro equipo especializado pasados varios días de trabajo y de recopilar de información, obtuvieron los datos necesarios, nuestro deseo es que resulte útil para ti para tu plan.
Solución:
La coerción de tipo significa que cuando los operandos de un operador son de tipos diferentes, uno de ellos se convertirá en un valor “equivalente” del tipo del otro operando. Por ejemplo, si lo hace:
boolean == integer
el operando booleano se convertirá en un número entero: false
se convierte 0
, true
se convierte en 1. Luego se comparan los dos valores.
Sin embargo, si usa el operador de comparación sin conversión ===
, no se produce dicha conversión. Cuando los operandos son de diferentes tipos, este operador devuelve false
y solo compara los valores cuando son del mismo tipo.
Comencemos con una breve introducción a los sistemas de tipos que creo que lo ayudarán a comprender la idea general de la coerción de tipos.
El sistema de tipos de un idioma define reglas que nos dicen qué tipos de datos existen en ese idioma y cómo se pueden combinar usando diferentes operadores. Por ejemplo, una regla de este tipo podría especificar que el operador más (+) solo actúa sobre números. Estas reglas existen principalmente para evitar que te dispares en el pie. Pero, ¿qué sucede cuando el programador rompe esa regla en el programa? No hay nada que impida que el programador escriba +
o “hello” + 5
en un programa incluso si el lenguaje no cree que esas expresiones tengan ningún sentido.
Lo que sucede en última instancia en esas situaciones depende de qué tan estricto sea el idioma con respecto a sus reglas de tipo.
Un sistema de tipos de idiomas a menudo tiene una de dos posiciones acerca de que rompas sus reglas:
- Di “¡Oye, eso no está bien!” e inmediatamente bloquee su programa.
- Diga “No puedo hacer nada con … pero puedo hacer algo con números” e intente convertir en un número.
Los idiomas con sistemas de tipos que toman la primera posición sobre sus reglas se denominan coloquialmente como idiomas “fuertemente tipados”. Son estrictos en cuanto a no dejarte romper sus reglas. Los que adoptan el segundo enfoque (como JavaScript) se conocen como lenguajes de “tipo débil” o “tipo suelto”. Claro, puede romper las reglas, pero no se sorprenda cuando convierta el tipo de datos que describió en su programa a la fuerza para cumplir con sus reglas. Ese comportamiento se conoce como… (redoble de tambores)… tipo de coacción.
Ahora veamos algunos ejemplos en JavaScript. Primero, comencemos con una expresión que no conduzca a la coerción de tipos.
5 + 5
Usando el operador + con dos números que es perfectamente válido. El programa tratará a + para que signifique “agregar” y felizmente sumará los dos números. No es necesaria la conversión.
Pero que pasa …
[] + 5
UH oh. En JavaScript, +
puede significar sumar dos números o concatenar dos cadenas. En este caso, no tenemos ni dos números ni dos cadenas. Sólo tenemos un número y un objeto. De acuerdo con las reglas de tipo de JavaScript, esto no tiene sentido lógico. Dado que perdona que rompas sus reglas, en lugar de colapsar, trata de darle sentido de todos modos. Entonces, ¿qué hace JavaScript? Bueno, sabe cómo concatenar cadenas, por lo que convierte ambos [] y 5 en cadenas y el resultado es string valor “5”.
¿Cuál es el problema con los operadores de comparación? ==
y ===
? ¿Por qué hay dos operadores de comparación?
==
no es inmune al comportamiento de conversión de tipos de JavaScript. Expresiones como 5 == “5”
evaluará a true porque JavaScript intentará convertir uno de ellos para que compare el mismo tipo de datos.
En muchos casos, eso no es deseable porque probablemente desee saber si algunos datos con los que está comparando son de un tipo diferente para poder decidir qué hacer al respecto. Ahí es donde el ===
entra el operador. Cuando usa ===
, no se realizará ninguna conversión de tipo. Por lo tanto, la expresión 5 === “5”
evaluará a false.
En Python, si intenta agregar, por ejemplo, cadenas y números enteros, obtiene un error:
>>> "hi" + 10
Traceback (most recent call last):
File "", line 1, in
TypeError: cannot concatenate 'str' and 'int' objects
Sin embargo, en JavaScript, no lo hace. los 10
se convierte en un string:
> "hi" + 10
"hi10"
“Tipo de coerción” es solo un nombre inapropiado para lo anterior. En realidad, ninguno de los lenguajes tiene “tipos” en el sentido de Java o C u otros lenguajes con static sistemas tipo. La forma en que los lenguajes tratan las interacciones entre los diversos valores no tipificados estáticamente es una cuestión de elección y convención.
valoraciones y reseñas
Tienes la posibilidad recomendar este enunciado si te ayudó.