1.10 Conversion entre tipos
Si usted tiene un numero pero necesita imprimirlo en pantalla, tiene que convertir el valor del numero a un string, en JavaScript esta conversion es llamada "coercion". Es igual, si alguien ingresa una serie caracteres numericos en un formulario en una tienda en linea, estos seria un string, pero si necesita usar esos valores para hacer operaciones matematicas, necesitara realizar una coercion para que los datos sean del tipo numero/number.
JavaScript provee muchas facilidades para forzar la coercion entre tipos. Por ejemplo:
var a = "42";
var b = Number( a );
console.log( a ); // "42"
console.log( b ); // 42
Usando Number(..)
(funcion nativa de JS) como se muestra, es una coercion explicita de un valor de otro tipo a un valor de tipo numero. Deberia ser muy sencillo.
Pero un tema controversial es lo que sucede cuando usted trata de comparar dos valores que no son del mismo tipo, y que requeriera una coercion implicita.
Cuando compara el string "99.99"
con el numero 99.99
, la mayoria de las personas diria que son equivalentes. Pero esos valores no son exactamente lo mismo, verdad?. Son el mismo valor representado en dos maneras diferentes, dos tipos diferentes. Usted podria decir que son "iguales", no?.
Para ayudarlo en este tipo de situaciones, JavaScript algunas veces entrara en funcionamiento y hara una coercion implicita de valores a tipos que coincidan.
Asi que si usa el operador ==
"igualdad" para hacer la comparacion "99.99" == 99.99
, JavaScript convertira el valor "99.99"
del lado derecho a su numero equivalente 99.99
. La comparacion entonces sera 99.99 == 99.99
, que por su puesto es verdad/true.
Si bien esta diseñado para ayudarlo, la coercion implicita puede crear confucion si no se toma el tiempo para aprender las reglas que riguen este comportamiento. La mayoria de los desarrolladores JS no tiene claro esta comportamiento, asi que el sentimiento hacia la coercion implicita es confusa y perjudica los programa con errores inesperados, y esto deberia ser evitado. Esto es incluso conocido como un defecto en el diseño del lenguaje.
Como sea, la coercion implicita es un mecanismo que puede ser aprendido, y con mayor razon por quien que desee tomar la programacion con JavaScript seriamiente. No solo no es confuso una vez que se han entendido las reglas, la coercion puede hacer mejores sus programas! El esfuerzo vale la pena.
Nota: Para mas informacion acerca de la coercion, ver el Capitulo 2 de este capitulo y el Capitulo 4 de Tipos y Gramatica de los libors de YDKJS.