Adição (+)

O operador de adição (+) produz a soma de operandos numéricos ou concatenação de strings.

Experimente

Sintaxe

js
x + y

Descrição

O operador de adição está encarregado para duas operações distintas, adição numérica e concatenação de Strings. Ao avaliar, ele primeiro coage ambos os operandos para primitivos chamando a função do objeto [@@toPrimitive]()()(com "default" como dica), e os métodos valueOf(), e toString(), nessa ordem. Em seguida, são testados os tipos dos dois operandos:

  • Se um lado é uma string, o outro operando também é convertido em uma string e eles são concatenados.
  • Se ambos forem BigInts, a adição de BigInt será executada. Se um lado for um BigInt, mas o outro não, um TypeError será lançado.
  • Caso contrário, ambos os lados são convertidos em números e a adição numérica é executada.

A concatenação de strings geralmente é considerada equivalente a literais de modelo ou String.prototype.concat(), mas não são. A adição força a expressão a uma chamada primitive , que chama valueOf() em prioridade; por outro lado, literais de modelo e concact() converte a expressão para uma string, que chama toString() em prioridade. Se a expressão tiver o método @@toPrimitive, a concatenação de strings o chama com "default" como dica, enquanto literais de modelo usam "string". Isso é importante para objetos que têm diferentes representações de string e primitivas — como Temporal, cujo método valueOf() lança.

js
const t = Temporal.Now.instant();
"" + t; // Throws TypeError
`${t}`; // '2022-07-31T04:48:56.113918308Z'
"".concat(t); // '2022-07-31T04:48:56.113918308Z'

Você é aconselhado a não usar "" + x para executar a coerção de string.

Exemplos

Adição numérica

js
// Number + Number -> adição
1 + 2; // 3
// Boolean + Number -> adição
true + 1; // 2
// Boolean + Boolean -> adição
false + false; // 0

Concatenação de String

js
// String + String -> concatenação
"foo" + "bar"; // "foobar"
// Number + String -> concatenação
5 + "foo"; // "5foo"
// String + Boolean -> concatenação
"foo" + false; // "foofalse"

Especificações

Specification
ECMAScript Language Specification
# sec-addition-operator-plus

Compatibilidade de navegadores

BCD tables only load in the browser

Veja também