Me pregunto qué sucede detrás de escena cuando sumamos, restamos o multiplicamos dos cadenas de números. Aquí hay un ejemplo:
let strNum1 = "300"; let strNum2 = "22"; let multiply = function(num1, num2) { let product = num1 * num2; return `${product}` }; multiply(strNum1, strNum2); //this will return ==> "6600"
¿El motor JS los convierte primero en números enteros y luego realiza las operaciones o sabe "mágicamente" que son números aunque estén en forma de cadena? La razón por la que pregunto es por el largo algoritmo de multiplicación . Para números de más de 8 caracteres, se vuelve raro cuando se multiplica con el operador en lugar de usar el algoritmo.
Esta es una pregunta de leetcode por cierto.
Puede analizar sus valores antes y después de la operación:
let multiply = function(num1 = '', num2 = '') { const product = Number(num1) * Number(num2); return `${product}` // Or String(product) };
Para responder a su pregunta: el motor JS convierte esas cadenas en números enteros antes de realizar la operación aritmética. Se llama Implicit coercion
.
Puede leer más sobre eso en este capítulo de You Don't Know JS .
En caso de suma ( +
), cuando se agrega un número a una cadena, JavaScript convierte el número en una cadena antes de la concatenación, pero en el caso de otras operaciones aritméticas como *
, -
, /
el motor JS convierte implícitamente la cadena en un número entero.
demostración :
let result; // numeric string used with + gives string type result = '3' + '2'; console.log(result, typeof result) // "32", "string" // numeric string used with - , / , * results number type result = '3' * '2'; console.log(result, typeof result) // 6, "number" result = '3' - '2'; console.log(result, typeof result) // 1, "number" result = '3' / '2'; console.log(result, typeof result) // 1.5, "number"