En JavaScript, los valores pueden ser de distintos tipos. Cambiar el tipo de una variable se puede hacer mediante una conversión de tipos explícita. Además de eso, JavaScript también realiza una coerción de tipos (conversión de tipos implícita) cuando el contexto lo requiere.
JavaScript no tiene una construcción para forzar un valor a otro tipo como muchos otros lenguajes, pero puedes usar en su lugar algunas funciones auxiliares integradas.
En particular, Boolean, Number y String se pueden usar como funciones para convertir un valor al tipo correspondiente.
Con Boolean(value) puedes convertir cualquier valor a un booleano.
Existe un conjunto fijo de valores, los llamados valores falsy, que se convierten en false.
Lo más importante: false, 0, el string vacío, null, undefined y NaN son falsy.
Para todos los demás valores, Boolean devuelve true.
A estos valores se les llama truthy.
Boolean(-1);
// => true
Boolean(0);
// => false
Boolean(' ');
// => true
Boolean('');
// => false
Ten en cuenta que, debido a las reglas descritas, '0', 'false', [] y {} son truthy en JavaScript.
Number(value) se puede usar para convertir un valor a un número.
Los espacios en blanco al principio y al final de un string se ignoran, y un string vacío se convierte en 0.
Si intentas convertir un valor no primitivo o un string que no representa un número, el resultado es NaN (Not-A-Number).
Number(' -12.34 ');
// => -12.34
Number('1,2');
// => NaN
Number('');
// => 0
Number({ num: 123 });
// => NaN
Con String(value) puedes convertir un valor a un string.
El resultado es el que esperarías para valores primitivos.
String(12.34);
// => '12.34'
String(false);
// => 'false'
String(null);
// => 'null'
String(undefined);
// => 'undefined'
En el caso de los arrays, la función String aplica la conversión a string a cada elemento y une los resultados con una coma.
También puedes aplicar tú mismo el método join, por ejemplo para personalizar el separador.
Ten en cuenta que en estos casos null y undefined se convierten en un string vacío.
String([42, null, true, 'abc']);
// => '42,,true,abc'
En el caso de los objetos, por defecto String devuelve un texto poco útil.
String({ key: 'value' });
// => '[object Object]'
En ciertos contextos, JavaScript convierte automáticamente un valor a otro tipo de dato antes de evaluar alguna sentencia. A esta conversión implícita se le llama coerción de tipos.
Cuando se usa un valor que no es booleano en un contexto booleano, JavaScript aplica las mismas reglas que la función Boolean para convertir el valor de forma implícita.
La coerción a booleano ocurre con frecuencia en
?
!
&& y OR || (el resultado de la expresión es uno de los operandos, no necesariamente un booleano)const num = 0;
if (num) {
// this block is NOT executed because 0 is falsy
}
Si se usa el operador de suma + con valores primitivos y uno de los operandos es un string, el otro también se convierte a string.
La lógica de conversión es la misma que cuando usas la función String.
Después, los dos strings se concatenan.
let name;
'hello ' + name;
// => 'hello undefined'
Muchos operadores convierten los operandos en números (si es necesario) según la lógica de la función Number explicada antes.
+ (si no hay ningún string de por medio), -, *, /, %, **
+, -
>, >=, <, <=
|, &, ^, ~
Consulta la lista de operadores de MDN para obtener más detalles sobre cualquiera de esos operadores.
Para evitar errores, es buena práctica llamar siempre a Number de forma explícita antes de aplicar esos operadores.
Tu amigo Kojo es un gran fanático de los números. Tiene un sitio web pequeño llamado «fun-with-numbers». Kojo no es muy bueno programando, así que te pidió ayuda.
Vas a crear dos funciones auxiliares para nuevos juegos de números en el sitio web de Kojo, y una tercera para validar cierta entrada que el usuario puede escribir.
Uno de los juegos del sitio web de Kojo se parece a una máquina tragamonedas que muestra dos grupos de ruedas con dígitos. Cada grupo de dígitos representa un número. Para la mecánica del juego, Kojo necesita saber la suma de esos dos números.
Escribe una función twoSum que acepte dos arrays como parámetros.
Cada array consta de uno o más números entre 0 y 9.
La función debe interpretar cada array como un número y devolver la suma de esos dos números.
twoSum([1, 2, 3], [0, 7]);
//=> 130
// [1, 2, 3] represents 123 and [0, 7] represents 7.
// 123 + 7 = 130
Otro juego del sitio web es un pequeño concurso de preguntas llamado «Lucky Numbers». Un usuario puede ingresar un número y luego ve si el número pertenece a alguna secuencia o patrón secreto. La secuencia o el patrón de los «lucky numbers» cambia cada mes, y cada usuario solo tiene un número limitado de intentos para adivinarlo.
Los números de la suerte de este mes deben ser números que sean palíndromos. Los números palindrómicos siguen siendo iguales cuando se invierten sus dígitos.
Implementa la nueva función luckyNumber que acepte un número como parámetro.
La función debe devolver true si el número es un palíndromo y false en caso contrario.
El número de entrada siempre será un entero positivo.
luckyNumber(1441);
//=> true
luckyNumber(123);
//=> false
En varios lugares del sitio web hay campos de entrada donde los usuarios pueden ingresar números y hacer clic en un botón para desencadenar alguna acción. Kojo quiere mejorar la experiencia del usuario de su sitio. Quiere mostrar un mensaje de error en caso de que el usuario haga clic en el botón pero el campo contenga un valor de entrada no válido.
Aquí hay un poco más de información sobre cómo se proporciona el valor de un campo de entrada.
undefined o null.Escribe una función errorMessage que acepte la entrada del usuario como parámetro.
Si el usuario no proporcionó ninguna entrada, errorMessage debe devolver 'Required field'.
Si la entrada no representa un número distinto de cero (según las reglas de conversión de JavaScript), se debe devolver 'Must be a number besides 0'.
En todos los demás casos, puedes suponer que la entrada es válida; el valor de retorno debe ser un string vacío.
errorMessage('123');
// => ''
errorMessage('');
// => 'Required field'
errorMessage('abc');
// => 'Must be a number besides 0'
Regístrate en Exercism para aprender y dominar JavaScript con 37 conceptos159 ejercicios y mentoría humana real, todo gratis.