Adición (+)
Baseline
Ampliamente disponible
Esta característica está consolidada y funciona en muchos dispositivos y versiones de navegador. Está disponible en todos los navegadores desde julio de 2015.
El operador de adición (+) produce la suma de operandos numéricos o la concatenación de string.
Pruébalo
console.log(2 + 2);
// Salida esperada: 4
console.log(2 + true);
// Salida esperada: 3
console.log("Hola " + "a todos");
// Salida esperada: "Hola a todos"
console.log(2001 + ": A Space Odyssey");
// Salida esperada: "2001: A Space Odyssey"
Sintaxis
x + y
Descripción
El operador (+) se sobrecarga para dos operaciones distintas: suma numérica y concatenación de string (cadena de caracteres). Cuando se evalúa, primero coerciona ambos operandos a sus valores primitivos. Después, los tipos de los dos operandos se comprueban en el siguiente orden:
- Si un lado es un string, el otro operando también se convierte a string y ambos se concatenan.
- Si ambos son BigInts, se realiza la suma de BigInt. Si un lado de la operación es un BigInt y el otro no, la operación arroja un
TypeError. - Como última opción, ambos valores se convierten a números y se realiza la suma numérica.
La concatenación de strings es frecuentemente pensada como equivalente con plantillas literales o con String.prototype.concat(), pero no lo son. La suma coerciona a la expresión hacia un primitivo, lo que llama prioritariamente a valueOf(); por otro lado, las plantillas literales y concat() coercionan la expresión a un string, el cual llama prioritariamente a toString(). Si la expresión tiene un método [Symbol.toPrimitive](), la concatenación de string lo llama con "default" como indicio, mientras que una plantilla literal usa "string". Esto es importante para objetos que tienen diferentes representaciones de string y primitivo, como es el caso de Temporal, cuyos objetos lanzan una excepción en todos sus métodos valueOf().
const t = Temporal.Now.instant();
"" + t; // Arroja TypeError
`${t}`; // '2022-07-31T04:48:56.113918308Z'
"".concat(t); // '2022-07-31T04:48:56.113918308Z'
Se recomienda no usar "" + x para realizar la coerción a string.
Ejemplos
>Adición numérica
1 + 2; // 3
Los demás valores que no son string ni BigInt se coercionan a números:
true + 1; // 2
false + false; // 0
Adición usando BigInts
1n + 2n; // 3n
No puedes mezclar operandos BigInt y numérico en una suma. null, undefined, y valores booleanos son coercionados a números y quedan prohibidos también.
1n + 2; // TypeError: Cannot mix BigInt and other types, use explicit conversions
2 + 1n; // TypeError: Cannot mix BigInt and other types, use explicit conversions
Los string tienen prioridad sobre otros tipos, así que sumar un string a un BigInt produce una concatenación de string en vez de un TypeError.
"1" + 2n; // "12"
Para realizar una suma entre un operando BigInt y uno que no es BigInt, convierte cualquiera de los operandos:
1n + BigInt(2); // 3n
Number(1n) + 2; // 3
Concatenación de strings
Si uno de los operandos es un string, el otro operando es convertido a string y son concatenados:
"fut" + "bol"; // "futbol"
5 + "bol"; // "5bol"
"fut" + false; // "futfalse"
"2" + 2; // "22"
Especificaciones
| Especificación |
|---|
| ECMAScript® 2027 Language Specification> # sec-addition-operator-plus> |