⊗jsPmBsATC 43 of 505 menu

Conversión automática de tipos de datos

Como ya sabes, las cadenas en JavaScript deben encerrarse entre comillas. Puede ocurrir que todos los caracteres de la cadena sean dígitos:

let a = '123';

En este caso, la variable a también es una cadena, pero con un matiz.

La esencia del matiz es la siguiente: si se realiza una operación matemática sobre una cadena con dígitos, esta operación se ejecutará como si realmente tuviéramos números, no cadenas:

alert('2' * '3'); // mostrará 6

En este caso, JavaScript ve que estamos intentando ejecutar una operación no válida para cadenas, pero sí válida para números.

También ve que, en realidad, nuestras cadenas son números entre comillas. Por lo tanto, JavaScript convierte automáticamente estas cadenas a números y realiza la operación matemática correspondiente con ellos.

Esto funciona si nuestras cadenas solo contienen dígitos. Si hay al menos una letra, JavaScript considerará la operación incorrecta y dará como resultado el valor NaN:

alert('2' * '3s'); // mostrará NaN

Además, la conversión automática ocurre si la operación es matemáticamente correcta, pero no válida para cadenas.

Por ejemplo, las cadenas no se pueden (pero los números sí) multiplicar, dividir, restar, por lo que en todas esas operaciones habrá una conversión automática de cadenas con dígitos a números.

Sin embargo, las cadenas, al igual que los números, se suman con el operador +. Esto significa que, en el caso de la suma, no habrá conversión automática:

let a = '1' + '2'; alert(a); // mostrará '12' - ocurrió una concatenación de cadenas

Si uno de los sumandos es un número y el otro es una cadena, siempre gana la cadena:

let a = 1 + '2'; alert(a); // mostrará '12'

En tales casos, JavaScript, por el contrario, convierte automáticamente los números a cadenas y realiza la concatenación de cadenas.

Sin embargo, hay matices cuando hay más de dos sumandos: en este caso, la conversión a un tipo específico depende del orden de ejecución de las operaciones.

En el siguiente ejemplo, primero 2 y 3 se sumarán como números, y luego el resultado se sumará a la cadena '1' pero como la cadena '5', lo que finalmente dará la cadena '15':

let a = '1' + (2 + 3); alert(a); // mostrará '15'

Si se quitan los paréntesis, todo se sumará de izquierda a derecha. Es decir, primero al número '1' se le sumará el número 2 y como resultado se obtendrá la cadena '12'. Luego a esta cadena se le sumará el número 3 y como resultado se obtendrá la cadena '123':

let a = '1' + 2 + 3; alert(a); // mostrará '123'

Pero en el siguiente ejemplo, los números 2 y 3 están escritos al principio, por lo que primero se sumarán como números, dando como resultado el número 5, y luego a este número se le sumará la cadena '1', dando finalmente la cadena '51':

let a = 2 + 3 + '1'; alert(a); // mostrará '51'

Sin ejecutar el código, determina qué se mostrará en pantalla:

let a = '5' + '2'; alert(a);

Sin ejecutar el código, determina qué se mostrará en pantalla:

let a = '5' + 2; alert(a);

Sin ejecutar el código, determina qué se mostrará en pantalla:

let a = 5 + '2'; alert(a);

Sin ejecutar el código, determina qué se mostrará en pantalla:

let a = 5 + 2; alert(a);

Sin ejecutar el código, determina qué se mostrará en pantalla:

let a = '5' * '2'; alert(a);

Sin ejecutar el código, determina qué se mostrará en pantalla:

let a = '5' - '2'; alert(a);

Sin ejecutar el código, determina qué se mostrará en pantalla:

let a = '5' / '2'; alert(a);

Sin ejecutar el código, determina qué se mostrará en pantalla:

let a = '5' % '2'; alert(a);

Sin ejecutar el código, determina qué se mostrará en pantalla:

let a = '5s' * '2'; alert(a);

Sin ejecutar el código, determina qué se mostrará en pantalla:

let a = '5s' + '2'; alert(a);

Sin ejecutar el código, determina qué se mostrará en pantalla:

let a = (-'5') + (-'2'); alert(a);

Sin ejecutar el código, determina qué se mostrará en pantalla:

let a = '5' * 1 + '2' * 1; alert(a);

Sin ejecutar el código, determina qué se mostrará en pantalla:

let a = '5' * '1' + '2' * '1'; alert(a);

Sin ejecutar el código, determina qué se mostrará en pantalla:

let a = '' + 3 + 1; alert(a);
datrnlbnen