JavaScript puede convertir dinámicamente el valor de una variable de un tipo a otro, dependiendo del contexto. Por ejemplo, si hacemos la siguiente multiplicación:
var result = "4" * 2 // resultado 8
En intérprete convertirá implícitamente el string "4" en un número porque entiende, por el contexto, que queremos multiplicar dos números.
A veces la conversión implícita es un problema y el resultado no es lo que queremos:
var result = "4" + 8 //resultado "48"
En este caso JavaScript considera que queremos concatenar dos strings. Convierte 8 en un string y devuelve "48". Sólo si los dos operandos son números se realizará la suma, si cualquiera de ellos es un string se concatenan.
Para todos los casos en los que la conversión automática puede darnos problemas, lo mejor es que nosotros forcemos la conversión a los tipos apropiados.
Utilizando constructores
Los tipos básicos ( boolean, string, number .... ) tienen un constructor asociado (por si queremos crearlos como objetos en vez de tipos primitivos). Podemos utilizar el constructor como una función para realizar la conversión explícita:
Number("4"); // 4 Number("Hola") // NaN ( Not a Number) Number("3 Hola") // NaN Number(1e3) // 1000 ( "e" significa exponente) String(4); // "4" String(0.7); // "0.7" Boolean(4); // true Boolean(0); // false Boolean([1,2,3]) // true
Existen también las funciones parseInt()
y parseFloat()
para hacer la conversión de strings a números. Estos métodos los veremos en detalle en otra entrada.
Forma rápida de conversión de tipos
Doble negación para convertir a boolean
var myBooleanValue = !!8; // true
Concatenar un string vacío para convertir a string
var myStringValue = "" + 8; // "8"
'+' para convertir a número
Los strings son siempre convertidos en números automáticamente si actuan como operandos de una expresión matemática ( excepto para la suma, que también concatena textos ). Sabiendo esto, una forma rápida de convertir un string en un número es incluirlo en alguna operación que no modifique su valor, como restarle 0 o multiplicarlo por 1:
var myNumberValue = "8" - 0; // number 8 var myNumberValue = "8" * 1; // number 8 var myNumberValue = "8" / 1; // number 8
Sin embargo, lo que más se utiliza por su simplicidad es el "+" como operador unitario. En este caso el comportamiento de la suma sí está perfectamente definido y claro y sabemos con toda seguridad que convierte un string en un número:
var myString = "8" var myNumberValue = +myString // number 8 var myNumberValue = +"20" // number 20
Esta conversión es la más rápida pero resulta en una notación un poco confusa. Puede confundirse con un intento erróneo de pre-incremento de una variable ( ++myVariable ). A veces se coloca entre paréntesis para intentar dejar más clara la conversión:
var myString = "8" var myNumberValue = (+myString) // number 8
La conversión utilizando Number() es la más lenta de todas.
Resumiendo las opciones de conversión rápida:
//to boolean var myBooleanValue = !!20; // true //to string var myStringValue = "" + 20; // "20" //to number var myNumberValue = +"20" // number 20
Fuentes:
Strings to Numbers
JavaScript, The Definitive Guide. Type Conversions
Type Conversion
No hay comentarios:
Publicar un comentario